【问题标题】:Android - Camera OK Button not working - Android 6.0Android - 相机 OK 按钮不起作用 - Android 6.0
【发布时间】: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 的设备上同样的代码工作正常。我已经添加了权限。

标签: java android camera


【解决方案1】:

我有同样的问题。 就我而言,保存路径不正确。我在sameFile.getParentFile().mkdirs() 上更改了sameFile.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);
}

【讨论】: