用于运行的应用。然而,就在最近它开始停止工作。该设备正在运行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" />
答案 0 :(得分:3)
发生的事情是,由于某种原因,(导出的)MusicContent提供程序将重定向到ConfigContentProvider,不导出。
解决问题的方法似乎是打开Google Play音乐。如果您暂时没有启动它,它将重定向到com.google.android.music.store.ConfigContentProvider并触发SecurityException。这有点问题,但至少我可以告诉我的用户该做什么。如果你能想出更好的东西,请告诉我。
提交错误也可能是个好主意。
答案 1 :(得分:2)
您无权访问该RUNNING
。它未导出,该应用未向您传递可用于访问它的ContentProvider
。
由于Uri
大概是来自您没有编写的应用,显然该应用的更新改变了这种行为。