繁体   English   中英

从相机拍摄照片在 Android 11 中不起作用

[英]Capture photo from camera is not working in Android 11

我使用设备的默认相机在我的应用程序中拍摄照片。 当我使用 android 10 及以下版本时,一切正常。 但是当我在 android 11 中使用相机时,无法在应用程序中工作。 你能帮我解决这个问题吗?

自 API 级别 30 以来,package 的可见性发生了变化。 https://developer.android.com/about/versions/11/privacy/package-visibility

为了让您的 package 管理器正常工作,您需要在AndroidManifest.xml中声明<queries>

代码:

<manifest package="your.package.name">
<queries>
    <intent>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
    </intent>
</queries>
</manifest>

这仅适用于默认相机应用程序。 如果您的应用正在使用某些 3rd 方相机,您可以在此处找到一些信息: https://commonsware.com/blog/2020/08/16/action-image-capture-android-r.html

你需要改变

文件 sd_directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

文件 sd_directory = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

将此添加到应用程序标记之外的清单中,我希望它能解决您的问题

<queries>
        <intent>
            <action android:name="android.media.action.IMAGE_CAPTURE" />
        </intent>
        <intent>
            <action android:name="android.intent.action.PICK" />
            <data android:mimeType="vnd.android.cursor.dir/image" />
        </intent>
</queries>

Android 11 有存储更新。 所以当使用 SDK >= 29 时必须设置 URI 而不是文件路径。

URI uri = null;   // set this uri in camera Intent
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
        {
           uri =  getApplicationContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
        }
        else
        {
            uri =   getApplicationContext().getContentResolver().insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, new ContentValues());
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM