Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在Android中捕获图像 设备:OnePlus 6 存储:8GB RAM+128GB ROM 安卓版本:10 氧气操作系统版本:OP6_02_BETA_31_Java_Android_Android Camera - Fatal编程技术网

Java 无法在Android中捕获图像 设备:OnePlus 6 存储:8GB RAM+128GB ROM 安卓版本:10 氧气操作系统版本:OP6_02_BETA_31

Java 无法在Android中捕获图像 设备:OnePlus 6 存储:8GB RAM+128GB ROM 安卓版本:10 氧气操作系统版本:OP6_02_BETA_31,java,android,android-camera,Java,Android,Android Camera,我使用下面的代码捕获图像。除了上述配置之外,该代码在几乎所有设备中都能完美工作 应用程序正在打开相机,我无法捕获图像。使用默认的摄像头应用程序,我没有得到任何例外。拍摄完照片后,会出现一个勾号按钮来确认图像。但那个按钮是不可点击的。所以,我用了一个不同的相机应用程序来捕捉图像。它在照相机应用程序中返回“保存照片失败”错误。没有抛出异常 我在控制台中从{p:7857;U:10456}中得到了这条消息“E/ContentProviderNative:onTransact error”。请帮我解决这个

我使用下面的代码捕获图像。除了上述配置之外,该代码在几乎所有设备中都能完美工作

应用程序正在打开相机,我无法捕获图像。使用默认的摄像头应用程序,我没有得到任何例外。拍摄完照片后,会出现一个勾号按钮来确认图像。但那个按钮是不可点击的。所以,我用了一个不同的相机应用程序来捕捉图像。它在照相机应用程序中返回“保存照片失败”错误。没有抛出异常

我在控制台中从{p:7857;U:10456}中得到了这条消息“E/ContentProviderNative:onTransact error”。请帮我解决这个问题

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            String appDirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + context.getString(R.string.app_name);
            appDir = new File(appDirPath);
            if (!appDir.exists()) {
                appDir.mkdirs();
            }

            mFileCaptured = new File(appDir, tag + ".jpg");

            mImageCaptureUri = FileProvider.getUriForFile(context,
                    context.getApplicationContext().getPackageName() + ".provider",
                    mFileCaptured);
        }
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
            intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        context.startActivityForResult(intent, 10000);

    } catch (Exception e) {
        Crashlytics.logException(e);
        Crashlytics.log(e.getLocalizedMessage());
    }
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
字符串appDirPath=Environment.getExternalStorageDirectory().getAbsolutePath()+“/”+context.getString(R.String.app_name);
appDir=新文件(appDirPath);
如果(!appDir.exists()){
appDir.mkdirs();
}
mFileCaptured=新文件(appDir,tag+“.jpg”);
mImageCaptureUri=FileProvider.getUriForFile(上下文,
context.getApplicationContext().getPackageName()+“.provider”,
mfile(捕获);
}

如果(Build.VERSION.SDK_INT您正在创建的文件(mFileCaptured)有问题。您刚刚创建了文件的路径,但该文件在文件系统中不存在,因此该文件的URI为空

尝试这样做:-

    if (!mFileCaptured.exists()) {
            mFileCaptured.createNewFile();
        }
如果上述代码不起作用,请尝试此操作

    private static Uri getSharableImageUri(Context context) {
    File outputDir = context.getCacheDir();
    File imagePath = new File(outputDir, context.getString(R.string.app_name));
    if (!imagePath.exists()) {
        imagePath.mkdir();
    }
    File tempFile = new File(imagePath, "image.jpg");
    Uri uri = null;
    try {
        if (!tempFile.exists()) {
            tempFile.createNewFile();
        }
        uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", tempFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return uri;
    }
并使用此方法设置URI

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {

            mImageCaptureUri = getSharableImageUri(context);
        }
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
            intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));

        }
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        context.startActivityForResult(intent, 10000);

    } catch (Exception e) {
        Crashlytics.logException(e);
        Crashlytics.log(e.getLocalizedMessage());
    }
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
mImageCaptureUri=getSharableMageUri(上下文);
}

如果(Build.VERSION.SDK_INT您正在创建的文件(mFileCaptured)有问题。您刚刚创建了文件的路径,但该文件在文件系统中不存在,因此该文件的URI为空

尝试这样做:-

    if (!mFileCaptured.exists()) {
            mFileCaptured.createNewFile();
        }
如果上述代码不起作用,请尝试此操作

    private static Uri getSharableImageUri(Context context) {
    File outputDir = context.getCacheDir();
    File imagePath = new File(outputDir, context.getString(R.string.app_name));
    if (!imagePath.exists()) {
        imagePath.mkdir();
    }
    File tempFile = new File(imagePath, "image.jpg");
    Uri uri = null;
    try {
        if (!tempFile.exists()) {
            tempFile.createNewFile();
        }
        uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", tempFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return uri;
    }
并使用此方法设置URI

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {

            mImageCaptureUri = getSharableImageUri(context);
        }
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
            intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));

        }
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        context.startActivityForResult(intent, 10000);

    } catch (Exception e) {
        Crashlytics.logException(e);
        Crashlytics.log(e.getLocalizedMessage());
    }
Intent Intent=新意图(MediaStore.ACTION\u IMAGE\u CAPTURE);
试一试{
String state=Environment.getExternalStorageState();
if(环境、介质、安装等于(状态)){
mImageCaptureUri=getSharableMageUri(上下文);
}

如果在Android 10下(Build.VERSION.SDK_INT,则无法再写入外部存储

改为使用GetFileDir()、GetExternalFileDir()或GetExternalFileDirs()


或者请求mediastore提供一个有效的uri,以便摄像头应用程序将图片写入其中。

在Android 10下,您无法再写入外部存储

改为使用GetFileDir()、GetExternalFileDir()或GetExternalFileDirs()


或者请求mediastore提供一个有效的uri,以便摄像头应用程序将图片写入其中。

我遵循了从的实现


现在,它对我起作用了。

我遵循了来自的实现

现在,它对我起作用了