Android 相机意图在 Android 11 中没有响应
Posted
技术标签:
【中文标题】Android 相机意图在 Android 11 中没有响应【英文标题】:Android Camera intent not responding in Android 11 【发布时间】:2021-01-31 04:19:35 【问题描述】:我正在使用相机意图。在 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()
Intent picIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE).
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
try
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, BuildConfig.APPLICATION_ID, 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"
。
【问题讨论】:
【参考方案1】:见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。
【讨论】:
感谢您的帮助,抱歉为时已晚。我已经尝试过了,但是当我在清单中使用<queries>
标签甚至存在于developer.android.com/training/basics/intents/… 中。您可以禁止显示警告。
谢谢。我想知道为什么 Android 不就这些变化发表公开声明。【参考方案2】:
activity.java 中的结果代码表示相机活动已被取消:
/** Standard activity result: operation canceled. */
public static final int RESULT_CANCELED = 0;
/** Standard activity result: operation succeeded. */
public static final int RESULT_OK = -1;
/** Start of user-defined activity results. */
public static final int RESULT_FIRST_USER = 1;
尝试为 IMAGE_CAPTURE 启动活动:
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
【讨论】:
【参考方案3】:删除这个 .putExtra(MediaStore.EXTRA_OUTPUT
【讨论】:
以上是关于Android 相机意图在 Android 11 中没有响应的主要内容,如果未能解决你的问题,请参考以下文章