当前位置:   article > 正文

java 用户拒绝对代码授予权限_securityexception:即使在获取运行时权限时也会拒绝权限...

java.lang.securityexception: permission denial: accessing service from pid=7

我发现了下面的一个异常:来自多个android 7.0设备的crashlytics-

Caused by java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/video/media from pid=7070, uid=12033 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

at android.os.Parcel.readException(Parcel.java:1684)

at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)

at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)

at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)

at android.content.ContentResolver.query(ContentResolver.java:532)

at android.content.CursorLoader.loadInBackground(CursorLoader.java:64)

at android.content.CursorLoader.loadInBackground(CursorLoader.java:56)

at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312)

at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)

at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:66)

at android.os.AsyncTask$2.call(AsyncTask.java:305)

at java.util.concurrent.FutureTask.run(FutureTask.java:237)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)

at java.lang.Thread.run(Thread.java:761)

我研究发现,当我们在android 6.0+设备中不采取运行时异常时,就会发生这种异常。

但在我的项目中,我在任何需要的地方都使用了运行时权限。崩溃没有指定我的项目的任何特定行。

下面的代码用于获取用户的运行时权限-

uploadVideo.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (Build.VERSION.SDK_INT >= 23)

getPermission();

else

uploadVideo();

}

});

private void getPermission() {

String[] params = null;

String writeExternalStorage = Manifest.permission.WRITE_EXTERNAL_STORAGE;

String readExternalStorage = Manifest.permission.READ_EXTERNAL_STORAGE;

int hasWriteExternalStoragePermission = ActivityCompat.checkSelfPermission(this, writeExternalStorage);

int hasReadExternalStoragePermission = ActivityCompat.checkSelfPermission(this, readExternalStorage);

List permissions = new ArrayList();

if (hasWriteExternalStoragePermission != PackageManager.PERMISSION_GRANTED)

permissions.add(writeExternalStorage);

if (hasReadExternalStoragePermission != PackageManager.PERMISSION_GRANTED)

permissions.add(readExternalStorage);

if (!permissions.isEmpty()) {

params = permissions.toArray(new String[permissions.size()]);

}

if (params != null && params.length > 0) {

ActivityCompat.requestPermissions(MainActivity.this,

params,

100);

} else

uploadVideo();

}

@Override

public void onRequestPermissionsResult(int requestCode,

String permissions[], int[] grantResults) {

switch (requestCode) {

case 100: {

if (grantResults.length > 0

&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

uploadVideo();

}

}

}

}

更新

根据阿里的回答,我需要分别检查这两个许可是否得到批准。

但是

按照

this

,如果授予权限组中的任何权限,则自动授予同一组中的其他权限。读写外部存储权限属于同一组。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1018324
推荐阅读
相关标签
  

闽ICP备14008679号