【发布时间】:2025-12-09 03:10:01
【问题描述】:
我面临一个非常奇怪的问题。单击相机活动中的图片后,会出现一个确认页面,其中包含三个选项(图标) - 确定、重拍和取消。 Retake 和 Cancel 按钮工作正常,但在 单击 OK 按钮后 - 没有任何反应。它没有返回到我的活动。我看过类似的帖子,但没有一个对我有用。我已授予所有权限读写和摄像头。以下是我在处理该问题时的一些观察。
1.在 Android 5.0.1 - LENEVO YOGA TAB 3,相同的代码,确定按钮工作正常。
2.在 Android 6.0 - LENEVO YOGA TAB 3,相同的代码,确定按钮不起作用(添加了读取、写入和摄像头的权限)。
3.在 Android 6.0 - LeEco 2,相同的代码,没有确定按钮,所以在捕获后返回活动 - 工作正常(添加了读取、写入和摄像头的权限)。
这就是我打开相机活动的方式
public final static String PRE_CAMERA_FILE_NAME = "my_image";
public final static String FILE_DIRECTORY =
(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ?
Environment.getExternalStorageDirectory().getAbsolutePath() :
Environment.getDataDirectory()) + File.separator + "Images";
private void openCamera() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File mCameraFile = new File(FILE_DIRECTORY, String.valueOf(PRE_CAMERA_FILE_NAME + System.currentTimeMillis()) + ".jpg");
if(!mCameraFile.exists()){
mCameraFile.mkdirs();
}
System.out.println("Path:=" + mCameraFile.getAbsolutePath());
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
mCameraFileUri = FileProvider.getUriForFile(getContext(),
BuildConfig.APPLICATION_ID + ".provider", mCameraFile);
} else {
mCameraFileUri = Uri.fromFile(mCameraFile);
}
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mCameraFileUri);
cameraIntent.putExtra("return-data", true);
getActivity().startActivityForResult(cameraIntent, REQUEST_TYPE_CAMERA);
}
OnActivityResult :
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mOnFileChooseListener != null && resultCode == Activity.RESULT_OK) {
String path = "";
if (requestCode == REQUEST_TYPE_CAMERA) {
path = mCameraFileUri.getPath();
} else if (requestCode == REQUEST_TYPE_UPLOAD_PDF_OR_PHOTO && data != null) {
path = FileUtils.getFilePath(getContext(), data.getData());
}
mOnFileChooseListener.onFileSelected(path);
}
}
已添加权限。
[]
谁能回答为什么会这样?提前致谢。
【问题讨论】:
-
当您点击确定按钮时,您点击的图片保存在设备的外部或内部存储中??
-
否,正在创建文件,但未打开会导致输入/输出错误。
-
我认为您必须添加 Marshmallow 权限类才能授予您的应用程序读取、写入等权限。为此,请参阅我的回答 *.com/questions/40504867/…
-
但是在其他安卓 6 的设备上同样的代码工作正常。我已经添加了权限。