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

相关内容

热门资讯

德州ai辅助!aapoker插... 德州ai辅助!aapoker插件(透视)从来真的是有挂(详细辅助解密教程)是一款可以让一直输的玩家,...
wepoke有没有挂!wepo... 您好,wepoke有没有挂这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很多玩...
wepoke模拟器!德扑之星内... wepoke模拟器!德扑之星内部(透视)真是是有挂(详细辅助曝光教程)1、许多玩家不知道wepoke...
微扑克辅助软件!wpk辅助nz... 微扑克辅助软件!wpk辅助nzt(透视)好像是真的有挂(详细辅助详细教程)1)微扑克辅助软件辅助挂:...
aapoker辅助工具!轰趴十... aapoker辅助工具!轰趴十三水有后台吗(透视)切实真的是有挂(详细辅助新版2025教程)是一款可...
微扑克有辅助挂!德扑ai自定义... 微扑克有辅助挂!德扑ai自定义设置数据(透视)其实真的有挂(详细辅助解密教程)是一款可以让一直输的玩...
德州之星有辅助挂!扑克世界牌局... 德州之星有辅助挂!扑克世界牌局设置(透视)一直存在有挂(详细辅助曝光教程)是一款可以让一直输的玩家,...
wpk德州透视辅助!aa po... wpk德州透视辅助!aa poker辅助软件(透视)一贯存在有挂(详细辅助透明教程);小薇(透视辅助...
aapoker透明挂!鱼扑克f... 自定义aapoker透明挂系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,...
wpk有透视辅助!德州ai辅助... wpk有透视辅助!德州ai辅助工具购买(透视)原先真的有挂(详细辅助存在挂教程)1、wpk有透视辅助...