Android 相机意图在 Android 11 后没有响应
Android Camera intent not responding in Android 11
我正在使用 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" />
创建文件的 Intent 函数:
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"
。
参见。可能是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。
删除这个.putExtra(MediaStore.EXTRA_OUTPUT
activity.java中的结果代码表示相机activity已被取消:
/** 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 启动 activity:
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
我正在使用 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" />
创建文件的 Intent 函数:
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"
。
参见
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
或参见Cannot take a photo programmatically on Android 11 - intent returns canceled status。
删除这个.putExtra(MediaStore.EXTRA_OUTPUT
activity.java中的结果代码表示相机activity已被取消:
/** 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 启动 activity:
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)