Android 12 (SDK > 29) Extra_Output 对于 ACTION_IMAGE_CAPTURE 不工作
Android 12 (SDK > 29) Extra_Output for ACTION_IMAGE_CAPTURE not working
我想用相机拍一张照片,然后发送给另一个activity。一切都在模拟器上运行,没有任何问题。但是,一旦我在我的真实设备上试用该应用程序,我总是在 ActivityResultLauncher 中获得状态代码 0,并且没有调用 If 分支。另一方面,在模拟器上我得到 -1 并且开始调用第二个 activity 的意图。我做错了什么?
我在真实设备上使用 Android 12 (SKD 31)
我现在也用模拟器测试了它 skd > 29 -> 同样的问题。只要我在相机视图中按下“确定”按钮获取图像,Android 就会让我回到 MainActivity,而不是像预期和期望的那样回到 AddNewPlace activity。 debuger/logcat 中没有错误。只要我使用 SDK < 29 的版本,一切都没有问题。我认为它与 FileProvide 或意图中的 EXTRA_OUTPUT 有关。
Manifest.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);
}
}
}
});
编辑
更新的代码,也不起作用。我必须改变一些东西吗
文件提供者?
File file =
MainActivity.this.getExternalFilesDir(UUID.randomUUID()+".jpg");
在清单文件中添加这些行
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
我想用相机拍一张照片,然后发送给另一个activity。一切都在模拟器上运行,没有任何问题。但是,一旦我在我的真实设备上试用该应用程序,我总是在 ActivityResultLauncher 中获得状态代码 0,并且没有调用 If 分支。另一方面,在模拟器上我得到 -1 并且开始调用第二个 activity 的意图。我做错了什么?
我在真实设备上使用 Android 12 (SKD 31)
我现在也用模拟器测试了它 skd > 29 -> 同样的问题。只要我在相机视图中按下“确定”按钮获取图像,Android 就会让我回到 MainActivity,而不是像预期和期望的那样回到 AddNewPlace activity。 debuger/logcat 中没有错误。只要我使用 SDK < 29 的版本,一切都没有问题。我认为它与 FileProvide 或意图中的 EXTRA_OUTPUT 有关。
Manifest.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);
}
}
}
});
编辑
更新的代码,也不起作用。我必须改变一些东西吗 文件提供者?
File file =
MainActivity.this.getExternalFilesDir(UUID.randomUUID()+".jpg");
在清单文件中添加这些行
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>