Android 12 (SDK > 29) ACTION_IMAGE_CAPTURE 的 Extra_Output 不起作用

Cap*_*i-N 5 android android-intent android-service android-camera

我想用相机拍一张照片,然后将其发送到另一个活动。一切都可以在模拟器上运行,没有任何问题。但是,一旦我在真实设备上尝试该应用程序,我总是在 ActivityResultLauncher 中收到状态代码 0,并且不会调用 If 分支。另一方面,在模拟器上我得到 -1 并且调用第二个活动的意图已启动。我究竟做错了什么 ?

我在真实设备上使用 Android 12 (SKD 31)

我现在也用模拟器 skd > 29 -> 测试了同样的问题。一旦我按下相机视图中的“确定”按钮获取图像,Android 就会将我带回 MainActivity,而不是如预期和期望的那样返回 AddNewPlace 活动。调试器/logcat 中没有错误。一旦我使用版本 SDK < 29,一切都可以正常工作。我认为这与 FileProvide 或意图中的 EXTRA_OUTPUT 有关。

清单.xml

在此输入图像描述

这个也行不通

在此输入图像描述

相机代码:

      File file = new File(Environment.getExternalStorageDirectory(),
                        UUID.randomUUID()+".jpg");

      outputFileUri = FileProvider.getUriForFile(MainActivity.this,BuildConfig.APPLICATION_ID + ".fileprovider",file);
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
      startActivityIntent.launch(intent);




       ActivityResultLauncher<Intent> startActivityIntent = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == RESULT_OK) // 0 on real device , -1 on Emulator
                {
                    if(result.getData() != null)

                    {
                        Log.e("FILE : ", outputFileUri.toString());
                        
                        Intent intent = new Intent(MainActivity.this,AddNewPlace.class);
                        intent.putExtra("File",outputFileUri.toString());

                        startActivity(intent);
                    }
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

编辑

更新了代码,还是不行。我需要更改 FileProvider 中的某些内容吗?

File file  = 
MainActivity.this.getExternalFilesDir(UUID.randomUUID()+".jpg");
Run Code Online (Sandbox Code Playgroud)

Bha*_*and 15

在清单文件中添加这些行

<queries>
        <intent>
            <action android:name="android.media.action.IMAGE_CAPTURE" />
        </intent>
    </queries>
Run Code Online (Sandbox Code Playgroud)