首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SecurityException:权限拒绝:读取(仅在模拟器上)

SecurityException:权限拒绝:读取(仅在模拟器上)
EN

Stack Overflow用户
提问于 2015-09-16 11:10:24
回答 3查看 39.7K关注 0票数 19

我的应用程序中有两个活动,MainActivity calls ImagePicker,它有一个GridView来显示手机图库中的所有图像,我使用ContentResolver来获取光标。

当我测试它时,它在我的手机上工作得很好,但每次在模拟器上都会立即崩溃。

以下是错误日志:

java.lang.SecurityException:权限拒绝:从pid=5934、uid=10060读取媒体uri content:// com.android.providers.media.MediaProvider /external/uid=10060/media需要android.permission.READ_EXTERNAL_STORAGE或grantUriPermission()

我确实有写在清单中的权限,如下所示:

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".ImagePicker" />
</application>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-16 17:52:04

你的仿真器是什么版本的android?你是用SDK 23编译的吗?如果您的仿真器是Marshmallow,则需要在运行时显式检查权限。这要归功于新的权限模型。

有关权限的更多信息,请查看文档:https://developer.android.com/training/permissions/index.html

票数 23
EN

Stack Overflow用户

发布于 2016-06-01 06:38:14

在调用方法之前,请检查权限。

代码语言:javascript
复制
private void checkPermission(){
    int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {     
         ActivityCompat.requestPermissions(         
    getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, Constants.WRITE_EXTERNAL_STORAGE); 
    } else {    
         callMethod(); 
    }
}

检查权限结果。

代码语言:javascript
复制
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {

            case Constants.WRITE_EXTERNAL_STORAGE:
                if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
                    callMethod(); 
                }
                break;

            default:
                break;
        }
    }
票数 16
EN

Stack Overflow用户

发布于 2016-03-22 17:19:45

如果您的应用程序目标版本是23,则会出现此错误,如果您的要求包括API23级,则需要将目标版本设置为23,并需要动态检查权限。此处是开发者网站check https://developer.android.com/training/permissions/requesting.html的示例

注意:即使你给目标22或更低,你的应用程序也会在没有这个(检查权限)错误的情况下与23一起工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32599132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档