安全例外:权限拒绝

时间:2017-04-10 21:30:12

标签: java android android-permissions

用于运行的应用。然而,就在最近它开始停止工作。该设备正在运行Android Nutella。下面是LogCat。

 java.lang.SecurityException: Permission Denial: reading com.google.android.music.store.ConfigContentProvider uri content://com.google.android.music.ConfigContent/one-key/2/ExplicitRestrictedByParentControl from pid=2500, uid=10373 requires the provider be exported, or grantUriPermission()

应用程序在最后一行(包含在SongParser方法中)的以下代码段中崩溃。

 String[] projection2 = {MediaStore.Audio.Media.ARTIST};
    Uri songUri=null;
    try {
        songUri = Uri.parse("content://com.google.android.music.MusicContent/audio");
    } catch (NullPointerException e){
        e.printStackTrace();
    }
    if (songUri!=null) {
        CursorLoader cl2 = new CursorLoader(context,
                songUri, projection2, null, null, null);
        cursor = cl2.loadInBackground();

在通过运行时权限方法请求权限后,我在以下方法中授予Uri权限。

 private void startService() {
    //start intent to RssService for feedback
    intent = new Intent(getActivity(), SongService.class);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    getContext().grantUriPermission("xxx.xxx.xxx.SongService",Uri.parse("content://com.google.android.music.MusicContent/audio"),Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.putExtra(SongService.RECEIVER, resultReceiver);
    getActivity().startService(intent);

}

这是SongService调用SongParser的地方。

@Override
protected void onHandleIntent(Intent intent) {

        List<String> eventItems= null;
    if (haveNetworkConnection()) {
        parser = new SongParser();
        eventItems = parser.getAllArtists(getApplicationContext());
    }
        Bundle bundle = new Bundle();
        bundle.putSerializable(ITEMS, (Serializable) eventItems);
        ResultReceiver receiver = intent.getParcelableExtra(RECEIVER);
        receiver.send(0, bundle);}}

我也在清单中包含了权限。同样,这个例外似乎独自发生。

<permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2 个答案:

答案 0 :(得分:3)

发生的事情是,由于某种原因,(导出的)MusicContent提供程序将重定向到ConfigContentProvider,导出。

解决问题的方法似乎是打开Goog​​le Play音乐。如果您暂时没有启动它,它将重定向到com.google.android.music.store.ConfigContentProvider并触发SecurityException。这有点问题,但至少我可以告诉我的用户该做什么。如果你能想出更好的东西,请告诉我。

提交错误也可能是个好主意。

答案 1 :(得分:2)

您无权访问该RUNNING。它未导出,该应用未向您传递可用于访问它的ContentProvider

由于Uri大概是来自您没有编写的应用,显然该应用的更新改变了这种行为。