问题描述
我再次需要您的帮助。 我正在使用Camera Intent,但我不明白我的代码有什么问题,直到Android 10一切正常,但是在Android 11中我得到的结果是代码0。 我在下面共享代码,请帮助我解决我的问题:
-
清单权限
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
private void openCameraApp() { 意图picIntent =新的意图(MediaStore.ACTION_IMAGE_CAPTURE)。 addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 尝试{
String file_path = Environment.getExternalStorageDirectory().toString() + "/" + mContext.getResources().getString(R.string.app_name); File dir = new File(file_path); if (!dir.exists()) dir.mkdirs(); imagePath = new File(dir,mContext.getResources().getString(R.string.app_name) + System.currentTimeMillis() + ".png"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { picIntent.putExtra(MediaStore.EXTRA_OUTPUT,FileProvider.getUriForFile(mContext,BuildConfig.APPLICATION_ID,imagePath)); setUri(FileProvider.getUriForFile(mContext,imagePath)); } else { picIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(imagePath)); setUri(Uri.fromFile(imagePath)); } ((Activity) mContext).startActivityForResult(picIntent,CAMERA_REQUEST); } catch (Exception e) { logger.e(e); } }
我已在清单文件的应用程序标记中添加了android:requestLegacyExternalStorage="true"
。
如果代码发布管理不当,我感到非常抱歉,因为我尝试正确地发布它,但是仍然无法对齐。
预先感谢,请帮助。
解决方法
请参见intent.resolveActivity returns null in API 30。 AndroidManifest可能有问题。
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
或参见Cannot take a photo programmatically on Android 11 - intent returns canceled status。
,这是因为您的应用没有权限访问Android 10中的存储,因为, Android已添加新的权限属性,用于访问使用Android 10及更高版本的设备中的存储,您必须在清单中添加
<manifest >
<application android:requestLegacyExternalStorage="true" >
...
</application>
</manifest>
希望问题的答案:)
,删除这个 .putExtra(MediaStore.EXTRA_OUTPUT