Android13读取媒体图像权限不起作用
创始人
2024-10-01 00:01:34
0

从Android 10(API级别29)开始,Android系统引入了存储访问框架(Storage Access Framework,SAF),在Android 11(API级别30)和Android 12(API级别31)中对其进行了进一步的增强。在Android 13中,SAF不再是可选的,并且应用程序必须使用它来读取媒体文件。

因此,如果您在应用程序中使用的是旧方法来读取媒体图像文件并且它没有被更新以使用SAF,则您需要更新该应用程序以使用SAF来读取媒体文件。下面是一个示例代码片段,展示如何使用SAF来读取图像文件:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_IMPORT_IMAGE);

@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_IMPORT_IMAGE && resultCode == Activity.RESULT_OK) {  
        Uri imageUri = data.getData();  
        InputStream inputStream = null;
        try {
            inputStream = getContentResolver().openInputStream(imageUri);
            // 从输入流中读取图像文件
            // ...
        } catch (IOException e) {
            e.printStackTrace();  
        } finally {  
            if (inputStream != null) {  
                try {
                    inputStream.close();  
                } catch (IOException e) {
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
}

注意:您需要在AndroidManifest.xml文件中添加以下权限:


同时,在AndroidManifest.xml文件中也需要为您的应用程序添加以下XML声明,以便系统知道您的应用程序将使用SAF:


    ...

最后,您还需要记住在运行时请求读取存储权限。以下是一个示例代码片段,展示如何在运行时请求读取存储权限:

private static final int REQUEST_CODE_READ_STORAGE_PERMISSION = 1000;

if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.READ_EXTERNAL_STORAGE)) {
        // 显示解释权限请求的UI
        // …
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                REQUEST_CODE_READ_STORAGE_PERMISSION);
    }
} else {
    // 已经有存储权限了
    // …
}

@Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == REQUEST_CODE_READ_STORAGE_PERMISSION) {
        if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 已经授予了存储权限
            // …
        } else {
            // 没有授予存储权限
            // …
        }
    }
}

在您的应用程序中使用这些代码片段,并确保遵循了SAF指南和Android 13的最佳做法

相关内容

热门资讯

透视揭露!wepoker辅助脚... 透视揭露!wepoker辅助脚本,wepoker私人局透视-确实是真的有辅助神器(哔哩哔哩)1、下载...
透视科普!wpk透视是真的假的... 透视科普!wpk透视是真的假的,wpk软件是正规的吗-真是存在有辅助软件(哔哩哔哩)1、金币登录送、...
透视解密!wepoker辅助真... 透视解密!wepoker辅助真的假的,We poker辅助器下载-真是真的有辅助神器(哔哩哔哩)亲,...
透视推荐!hhpoker辅助软... 透视推荐!hhpoker辅助软件,hhpoker德州有挂吗-果然是有辅助神器(哔哩哔哩)1、模拟器是...
透视科普!wpk透视是真的假的... 透视科普!wpk透视是真的假的,wpk辅助器是真的吗-真是是真的有辅助攻略(哔哩哔哩)1、有没有辅助...
透视曝光!wepoker可以透... 透视曝光!wepoker可以透视码,wejoker内置辅助-本来有辅助教程(哔哩哔哩)1、该软件可以...
透视揭露!wepoker破解工... 透视揭露!wepoker破解工具,wepoker怎么设置盖牌-本来一直总是有辅助方法(哔哩哔哩)1、...
透视有挂!有哪些免费的wpk作... 透视有挂!有哪些免费的wpk作弊码,wpk辅助器是真的吗-果然一直总是有辅助脚本(哔哩哔哩)1、公共...
透视关于!德扑圈透视挂,德普之... 透视关于!德扑圈透视挂,德普之星透视辅助-好像是真的有辅助软件(哔哩哔哩)脚本下载中分为三种模型:挂...
透视解密!德普辅助器怎么用,德... 透视解密!德普辅助器怎么用,德普之星透视-好像是有辅助app(哔哩哔哩)1、完成辅助器v3.3的残局...