由于权限被拒绝,MediaScannerConnection 在 Android 6 上失败
Posted
技术标签:
【中文标题】由于权限被拒绝,MediaScannerConnection 在 Android 6 上失败【英文标题】:MediaScannerConnection fails on Android 6 because of permission denial 【发布时间】:2016-01-12 19:26:56 【问题描述】:我使用 MediaScannerConnection 来调用它的 scanFile 方法,用于将图像添加到设备库。但在 android 6 中,当我执行它时会收到此异常:
E/DatabaseUtils: java.lang.SecurityException: Permission Denial: 阅读 com.android.providers.media.MediaProvider uri content://media/external/fs_id from pid=22984, uid=10078 需要 android.permission.READ_EXTERNAL_STORAGE,或grantUriPermission()
和
E/iu.UploadsManager:java.lang.SecurityException:权限拒绝: 阅读 com.android.providers.media.MediaProvider uri content://media/external/fs_id from pid=22984, uid=10078 需要 android.permission.READ_EXTERNAL_STORAGE,或grantUriPermission()
有什么帮助吗?
【问题讨论】:
我面临同样的问题。我正在尝试将视频上传到 Youtube,但我遇到了同样的错误。你找到解决办法了吗? 不。我注意到当我使用 WhatsApp 拍照时,在聊天中,我可以在 LogCat 中看到同样的错误。因此,由于新的运行时权限,这可能是 Android 6 的问题...... 我尝试添加标志 Intent.FLAG_GRANT_READ_URI_PERMISSION 但似乎不起作用。 我也有同样的问题 【参考方案1】:这是处理权限的新方法的结果。您的应用现在需要请求运行时许可并准备好被拒绝。
在您的 onCreate(或任何地方)中检查并可能请求许可:
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_EXTERNAL_STORAGE))
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
else
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]Manifest.permission.READ_EXTERNAL_STORAGE,
MY_PERMISSIONS_REQUEST_READ_MEDIA);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
然后准备好接受这样的权限:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults)
switch (requestCode)
case MY_PERMISSIONS_REQUEST_READ_MEDIA:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)
else
// permission denied, boo! Disable the
// functionality that depends on this permission.
return;
【讨论】:
没有。如您所见,异常不是由我的应用程序引发的,而是由 DatabaseUtils 和 UploadsManager 引发的。并且运行时权限(还)不会影响我的应用程序,因为我的目标不是 API 23。 答案仍然与列出的问题相关,并且对遇到类似问题的其他人有用。我赞成删除反对票。一旦覆盖了应用程序中的所有事件,有没有办法设置权限?而不必弄清楚应用可能需要在哪里请求权限?以上是关于由于权限被拒绝,MediaScannerConnection 在 Android 6 上失败的主要内容,如果未能解决你的问题,请参考以下文章
由于权限被拒绝,MediaScannerConnection 在 Android 6 上失败
由于权限处理程序,应用程序被 Google Play 商店拒绝