Камера всегда возвращает resultCode как 0

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

Проблема заключается в том, что камера всегда возвращает код результата 0, независимо от того, нажимаю ли я или отменю. Используемый фрагмент кода выглядит следующим образом:

protected void startCameraActivity()
{

    Log.i("MakeMachine", "startCameraActivity()" );

    File file = new File( _path );
    Uri outputFileUri = Uri.fromFile( file );

    Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
    startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{   

    Log.i( "MakeMachine", "resultCode: " + resultCode );

    switch( resultCode )
    {
        case 0:
            Log.i( "MakeMachine", "User cancelled" );
            break;

        case -1:
            Log.i( "MakeMachine", "User done" );
            onPhotoTaken();
            break;
    }
}

Лог-код показывает:

05-31 14:58:15.367: E/asset(29114): MAS: getAppPckgAndVerCode package: makemachine.android.examples === version 1
05-31 14:58:15.398: D/dalvikvm(29114): Trying to load lib lib_glossary.so 0x0
05-31 14:58:15.414: D/dalvikvm(29114): Added shared lib lib_glossary.so 0x0
05-31 14:58:26.125: I/MakeMachine(29114): ButtonClickHandler.onClick()
05-31 14:58:26.125: I/MakeMachine(29114): startCameraActivity()
05-31 14:58:26.507: W/IInputConnectionWrapper(29114): showStatusIcon on inactive InputConnection
05-31 14:58:36.375: I/MakeMachine(29114): User cancelled
05-31 14:58:36.375: I/MakeMachine(29114): resultCode: 0
05-31 14:58:50.945: I/MakeMachine(29114): ButtonClickHandler.onClick()
05-31 14:58:50.945: I/MakeMachine(29114): startCameraActivity()
05-31 14:58:51.429: W/IInputConnectionWrapper(29114): showStatusIcon on inactive InputConnection
05-31 14:59:01.554: I/MakeMachine(29114): User cancelled
05-31 14:59:01.554: I/MakeMachine(29114): resultCode: 0

Ответ 1

В соответствии с разделом комментариев причина, по которой resultCode возвращалась 0 (это означает, что результат был отменен), заключается в том, что при съемке для сохранения на SD-карту вам необходимо добавить разрешение WRITE_EXTERNAL_STORAGE на ваш манифест.

Ответ 2

Проблема (в android >= 5.0) может быть в режиме singleInstance.

если ваша активность launchMode установлена ​​на singleInstance, тогда в android < 5.0 вы немедленно получите отмененный результат. В android >= 5.0 у вас будет resultCode == Activity.RESULT_CANCELED.

Попробуйте использовать launchMode = singleTask. Это очень похоже на singleInstance, но позволяет запускать другие действия в задаче.

Подробнее здесь: https://developer.android.com/guide/topics/manifest/activity-element.html#lmode

Ответ 3

У меня возникла такая же проблема. Камера работает на 5.0+ с lauchmode = singleInstance возвращает правильный "RESULT_OK", но на Android 4.0 я возвращал 0 до:

Android 4.0 переключился на "launchMode = singleTask" в AndroidManifest.xml для операции, вызывающей камеру, в результате чего "RESULT_OK" == 1

Это полезно для приложений с обратной совместимостью.

Ответ 4

Кроме того, иногда проблема возникает из-за того, что лично не добавлена ​​требуемая подпапка. Приложение аварийно сбрасывает итоговый код результата как 0 каждый раз.