Системная камера

Ответить
Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Системная камера

Сообщение Sympathy » 24 сен 2015, 18:06

Можно ли из своего приложения вызвать системную камеру так, чтобы отснятое видео сохранить под своим именем, в свою папку ?

Я вызываю её так.

Код: Выделить всё

       Intent i = new Intent();
    	i.setAction(Intent.ACTION_CAMERA_BUTTON);
    	i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN,
    			KeyEvent.KEYCODE_CAMERA));
    	sendOrderedBroadcast(i, null);

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Системная камера

Сообщение doter.ua » 24 сен 2015, 19:45

Можно переместить и переименовать.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 24 сен 2015, 20:42

doter.ua, я думала, что ты можешь немного больше
Может кто то ещё знает)
Может быть какой-нибудь волшебный принц)




Добавлено позже:
А ну да, точно. Сама про это думала раньше и забыла.
После закрытия камеры, взять из галереи последний файл перекинуть в свою папку и переименовать.
Последний раз редактировалось Sympathy 24 сен 2015, 20:53, всего редактировалось 2 раза.

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 24 сен 2015, 21:19

Спасибо)
был ещё где то отдельный топик, где собраны все команды по работе с файлами
занялась поиском

Так, вот оно
viewtopic.php?f=26&t=860
Вдруг кому пригодится

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 25 сен 2015, 03:30

Код: Выделить всё

 Intent i = new Intent(); 
        i.setAction(Intent.ACTION_CAMERA_BUTTON); 
        i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, 
                KeyEvent.KEYCODE_CAMERA)); 
        sendOrderedBroadcast(i, null);

Doter), а ты не знаешь если я пользуюсь вот этим кодом для открытия системной видеокамеры, я могу как то естественным образом узнать было ли снято видео или нет). Или самое простое решение в этом случае - это перед запуском камеры запомнить имя или дату последнего снятого видеофайла и потом сравнить.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Системная камера

Сообщение klblk » 25 сен 2015, 07:52

http://developer.android.com/intl/ru/tr ... tureIntent
Так пробовала?
В onActivityResult вероятно из Uri можно получить и местоположение файла и в случае необходимости его переместить.

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 25 сен 2015, 19:38

Так пробовала, приложение падает при попытке обработать результат съемки

Открываю камеру

Код: Выделить всё

 Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
 	       if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
 	           startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
Снимаю видео и ловлю ответ

Код: Выделить всё

	    
   	 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

			
			

   		 if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
   	     
Log.d(TAG, "тут бываем ?");
   			Uri videoUri = intent.getData();
Log.d(TAG, "тут бываем2 ?");
   	 
                                filePath =  videoUri.getPath();
Log.d(TAG, "тут бываем3 ?");
        	                 Log.d(TAG, filePath);
        	                 File f1 = new File(filePath);
        	                 File f2 = new File("/storage/external_SD/video/vonote1.mp4");
        	                 f1.renameTo(f2);
                                .... 
                                
Программы прерывается на строчке Uri videoUri = intent.getData();
это я по своим хитрым логам поняла))

а так вообще есть и репорт

Код: Выделить всё

09-28 03:07:02.968: D/myLogs(21459): тут бываем ?
09-28 03:07:02.969: D/AndroidRuntime(21459): Shutting down VM
09-28 03:07:02.969: W/dalvikvm(21459): threadid=1: thread exiting with uncaught exception (group=0x420218a8)
09-28 03:07:02.971: E/AndroidRuntime(21459): FATAL EXCEPTION: main
09-28 03:07:02.971: E/AndroidRuntime(21459): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/video/media/15556 }} to activity {om.exa/om.exa.MyActivity}: java.lang.NullPointerException
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:3373)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread.handleSendResult(ActivityThread.java:3416)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread.access$1100(ActivityThread.java:151)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1349)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.os.Handler.dispatchMessage(Handler.java:99)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.os.Looper.loop(Looper.java:153)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread.main(ActivityThread.java:5093)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at java.lang.reflect.Method.invokeNative(Native Method)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at java.lang.reflect.Method.invoke(Method.java:511)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at dalvik.system.NativeStart.main(Native Method)
09-28 03:07:02.971: E/AndroidRuntime(21459): Caused by: java.lang.NullPointerException
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at om.exa.MyActivity.onActivityResult(MyActivity.java:8657)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.Activity.dispatchActivityResult(Activity.java:5407)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:3369)
09-28 03:07:02.971: E/AndroidRuntime(21459): 	... 11 more

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 25 сен 2015, 19:42

Не знаю как это лечится(
у меня андройд 4.1.2

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Системная камера

Сообщение klblk » 28 сен 2015, 07:46

Тут что:
at om.exa.MyActivity.onActivityResult(MyActivity.java:8657)?

Возможно в манифесте нужны:
[syntax=xml]<uses-feature android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />[/syntax]

пс: MyActivity больше 8 тысяч строк, может пора заняться рефакторингом?=)

update:
собственно у меня работает:
Activity:
[syntax=java5]package com.wolfsgotosky.testgetvideo;

import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.VideoView;

public class MainActivity extends AppCompatActivity {

private static final int REQUEST_VIDEO_CAPTURE = 1;
VideoView videoView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button_get_video);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
}
});
videoView = (VideoView) findViewById(R.id.videoView);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
Uri videoUri = data.getData();
videoView.setVideoURI(videoUri);
videoView.start();
}
}
}
[/syntax]

xml:
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Get Video"
android:id="@+id/button_get_video"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />

<VideoView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/videoView"
android:layout_below="@+id/button_get_video"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
[/syntax]
Manifest:
[syntax=xml]<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wolfsgotosky.testgetvideo" >
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
[/syntax]

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 29 сен 2015, 00:22

Мы едва знакомы))
А вы уже предлагаете заняться рефакторингом ?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Системная камера

Сообщение klblk » 29 сен 2015, 07:46

Sympathy писал(а):Мы едва знакомы))
А вы уже предлагаете заняться рефакторингом ?
Если бы мы были ближе знакомы, я бы на этом настаивал. А так всего лишь совет=)
мне от моих 3к строк тошно, а тут 8к.

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 29 сен 2015, 22:17

Если честно, у меня ещё ни разу не было рефакторинга
всё что я умею - это робко делать фильтры)

А всё для чего я использую логи - это читать свои же сообщения,
иногда пытаясь понять в какой из этих ужасны красных строчек сообщение об ошибке.
Жаль что не было ни одного подробного урока на эту тему.

Так что я понятия не имею, как заниматься рефакторингом)
Так что предложите это кому-нибудь другому)

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Системная камера

Сообщение doter.ua » 29 сен 2015, 23:47

Самое время окунуться в мир паттернов, различных архитектурных решений и принципа "clean code".
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
Sympathy
Сообщения: 42
Зарегистрирован: 14 июн 2015, 19:50

Re: Системная камера

Сообщение Sympathy » 30 сен 2015, 00:12

Это у тебя дома ?)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Системная камера

Сообщение klblk » 30 сен 2015, 06:49

Sympathy писал(а):Если честно, у меня ещё ни разу не было рефакторинга
всё что я умею - это робко делать фильтры)

А всё для чего я использую логи - это читать свои же сообщения,
иногда пытаясь понять в какой из этих ужасны красных строчек сообщение об ошибке.
Жаль что не было ни одного подробного урока на эту тему.

Так что я понятия не имею, как заниматься рефакторингом)
Так что предложите это кому-нибудь другому)
Про логи смотреть тут: viewtopic.php?f=60&t=3198

Ответить