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的最佳做法

相关内容

热门资讯

反观!pokemomo辅助软件... 反观!pokemomo辅助软件,wpk俱乐部是做什么的,一贯是真的有挂(有挂分析)一、wpk俱乐部是...
必备科技!pokermaste... 必备科技!pokermaster破解版(辅助挂)切实真的是有挂(有挂方针辅助方法)1、上手简单,内置...
专业讨论!HH平台挂(辅助挂)... 专业讨论!HH平台挂(辅助挂)总是存在有挂(存在有挂辅助软件)1、下载好脚本下载之后点击打开,先需要...
教程辅助!wepoker辅助透... 教程辅助!wepoker辅助透视软件(辅助挂)果然是有挂(存在有挂辅助插件)1、免费辅助多个强度级别...
一分钟了解!wepoker免费... 一分钟了解!wepoker免费辅助器(辅助挂)果然存在有挂(竟然有挂辅助技巧)1、该软件可以轻松地帮...
总算了解!wepoker底牌透... 总算了解!wepoker底牌透视脚本(辅助挂)竟然是有挂(确实有挂辅助攻略)1、辅助软件下载优化,底...
让我来分享经验!wpk辅助哪里... 让我来分享经验!wpk辅助哪里买(辅助挂)一贯存在有挂(证实有挂辅助技巧)1、模拟器是什么优化,俱乐...
总算明白!wejoker开挂(... 总算明白!wejoker开挂(辅助挂)真是是有挂(有挂详细辅助教程)1)有没有挂:进一步探索有辅助吗...
信息共享!pokemmo手机版... 信息共享!pokemmo手机版修改器(辅助挂)竟然存在有挂(有挂教程辅助脚本)1、下载好透视辅助下载...
玩家必备科技!wepoker有... 玩家必备科技!wepoker有辅助插件吗(辅助挂)都是存在有挂(竟然有挂辅助软件)1、免费脚本咨询教...