12

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;
    }
}

logcat は次を示します。

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
4

5 に答える 5

10

問題 (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

于 2016-02-18T00:17:40.463 に答える
9

コメント セクションによると、が 0 を返した (結果がキャンセルされたことを意味する) 理由は、SD カードに保存する写真を撮るときに、マニフェストにアクセス許可をresultCode追加する必要があるためです。WRITE_EXTERNAL_STORAGE

于 2014-06-02T13:23:32.370 に答える
2

また、必要なサブフォルダーを個人的に追加していないために問題が発生する場合もあります。アプリケーションはサイレントにクラッシュし、結果コードは毎回 0 になります。

于 2015-11-09T13:10:40.193 に答える