我面临一个非常奇怪的问题。单击相机活动中的图片后,将显示一个确认页面,其中包含三个选项(图标) - 确定,重新拍摄和取消。 重新启动和取消按钮工作正常,但在单击确定按钮后 - 没有任何反应。它不会返回到我的活动。我看过类似的帖子,但没有一个对我有用。我已经给了所有读写和相机的许可。下面是我在处理这个问题时所做的一些观察。
1.On Android 5.0.1 - LENEVO YOGA TAB 3 ,相同代码,确定按钮正常工作。
2.On 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);
}
}
已添加权限。
[]
任何人都可以回答为什么会这样吗?提前致谢。
答案 0 :(得分:1)
我有同样的问题。
就我而言,保存路径不正确。我在sameFile.mkdirs()
上更改了sameFile.getParentFile().mkdirs()
。
在您的情况下mCameraFile.mkdirs()
使用文件名创建目录。
我的工作代码
File file = new File(getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES)
+ File.separator
+ screenState.catalogKey,
idImg.toString());
if (file.getParentFile().exists() || file.getParentFile().mkdirs()) {
mOutputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutputFileUri);
startActivityForResult(intent, ConstantManager.I_CAMERA_RESULT);
}