Запуск видеокамеры с намерением - PullRequest
2 голосов
/ 20 сентября 2010

Я пишу очень маленькое приложение, которое просто открывает приложение камеры, готовое для видео. Я могу заставить свой код работать на эмуляторе Android 2.2, но он не будет работать на моем устройстве, Motorola Droid 1 stock 2.2 FRG22D. Есть идеи, где я ошибся в этом коде?

public class StartVid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

final int VIDEO = 1;

    Intent intent = new Intent();
    intent.setClassName("com.android.camera","com.android.camera.VideoCamera");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(intent, VIDEO );
    finish();

Похоже, что ThorstenW правильный. Я бы поддержал ваш ответ, если бы мне хватило репутации. Вы можете видеть из logcat, что com.android.camera не может быть найден и выдает фатальное исключение. Logcat ниже.

D / dalvikvm (1159): GC_EXTERNAL_ALLOC освободил 251 объект / 13456 байт за 66 мс I / ActivityManager (1086): Начальная активность: Intent {act = android.intent.action. ГЛАВНАЯ cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.goatpen.Phobo s.QSVideo / .StartVid} I / ActivityManager (1086): Запустить процесс com.goatpen.Phobos.QSVideo для действия com .goatpen.Phobos.QSVideo / .StartVid: pid = 483 uid = 10092 gids = {}

E / AndroidRuntime (483): java.lang.RuntimeException: не удалось запустить действие Co mponentInfo {com.goatpen.Phobos.QSVideo / com.goatpen.Phobos.QSVideo.StartVid}: и roid.content.ActivityNotFoundException: невозможно найти явный класс активности { com.android.camera/com.android.camera.VideoCamera}; Вы объявили этот актив в вашем AndroidManifest.xml?

E / AndroidRuntime (483): вызвано: android.content.ActivityNotFoundException: U невозможно найти явный класс активности {com.android.camera/com.android.camera.Vid eoCamera}; Вы объявили об этом в своем файле AndroidManifest.xml?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2010

Вы не поверите, насколько простым было решение. Сначала приложение камеры Motorola Droid - это com.google.android.camera. Это стандартное имя пакета Android 2.2. Я использовал adb, чтобы получить файл из /data/system/packages.xml, чтобы подтвердить это.

Также есть намерение открыть приложение камеры в режиме видеомагнитофона. INTENT_ACTION_VIDEO_CAPTURE.

 Intent intent = new Intent("android.media.action.VIDEO_CAMERA");

Это намерение использовать для вызова приложения камеры в режиме видео.

3 голосов
/ 06 декабря 2016

Как Торстенвв указывает на ; Старайтесь не начинать Intents с явных имен компонентов, если они не находятся внутри вашего приложения. Это может привести к поломке приложения в разных версиях Android.

Скорее используйте методы, которые появляются в документах.

Чтобы запустить камеру только для видео:

static final int REQUEST_VIDEO_CAPTURE = 1;

private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
}

Прочитайте результат своей активности на ActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
        Uri videoUri = intent.getData();
        mVideoView.setVideoURI(videoUri);
    }
}
2 голосов
/ 20 сентября 2010

Motorola разместила свое собственное приложение для камеры на Droid, так что активность другая.На моем Milestone (европейская версия Droid) класс com.motorola.Camera.Camcorder.

Этот пример показывает, что вы не можете полагаться на использование механизма намерений с фиксированным пакетом и строками имен классов, если естьв Android SDK нет общего намерения выполнить определенную задачу, что, к сожалению, относится к вызову видеокамеры.Активность, которую необходимо вызвать для видеокамеры, может и будет отличаться для разных типов телефонов (возможно, даже для одной и той же модели телефона, если пользователь изменяет ее).

Однако вы можете запустить значение по умолчанию (по-прежнему)приложение камеры, отправив заказанную трансляцию с ACTION_CAMERA_BUTTON.

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