Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED解决方法
2016-05-06 16:33
916 查看
在android4.4及以上版本的手机里运行,碰到如下异常:
[plain]
view plain
copy
<pre name="code" class="html">12-21 12:02:07.643: E/AndroidRuntime(28893): java.lang.RuntimeException: An error occured while executing doInBackground()
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.lang.Thread.run(Thread.java:818)
12-21 12:02:07.643: E/AndroidRuntime(28893): <strong>Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=28893, uid=10249</strong>
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.Parcel.readException(Parcel.java:1540)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.Parcel.readException(Parcel.java:1493)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2795)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1327)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:376)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileViewInteractionHub.notifyFileSystemChanged(FileViewInteractionHub.java:585)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileViewInteractionHub.onFileChanged(FileViewInteractionHub.java:1088)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileOperationHelper$4.run(FileOperationHelper.java:218)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileOperationHelper$3.doInBackground(FileOperationHelper.java:164)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-21 12:02:07.643: E/AndroidRuntime(28893): ... 4 more
问题所在:Android4.4及以上版本中限制了只有系统应用才有权限发送广播(Android.intent.action.MEDIA_MOUNTED)通知系统扫描SD卡,非系统应用则无权限,一旦运行则出现上述异常。
解决方法:将net.micode.fileexplorer.FileViewInteractionHub.Java文件中的notifyFileSystemChanged()修改如下:
[java]
view plain
copy
private void notifyFileSystemChanged(String path) {
if (path == null)
return;
final File f = new File(path);
if (Build.VERSION.SDK_INT >= 19 /*Build.VERSION_CODES.KITKAT*/) { //添加此判断,判断SDK版本是不是4.4或者高于4.4
String[] paths = new String[]{Environment.getExternalStorageDirectory().toString()};
String[] paths = new String[]{path};
MediaScannerConnection.scanFile(mContext, paths, null, null);
} else {
final Intent intent;
if (f.isDirectory()) {
intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
4000
intent.setClassName("com.android.providers.media", "com.android.providers.media.MediaScannerReceiver");
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
Log.v(LOG_TAG, "directory changed, send broadcast:" + intent.toString());
} else {
intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(new File(path)));
Log.v(LOG_TAG, "file changed, send broadcast:" + intent.toString());
}
mContext.sendBroadcast(intent);
}
}
[plain]
view plain
copy
<pre name="code" class="html">12-21 12:02:07.643: E/AndroidRuntime(28893): java.lang.RuntimeException: An error occured while executing doInBackground()
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.lang.Thread.run(Thread.java:818)
12-21 12:02:07.643: E/AndroidRuntime(28893): <strong>Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=28893, uid=10249</strong>
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.Parcel.readException(Parcel.java:1540)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.Parcel.readException(Parcel.java:1493)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2795)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1327)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:376)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileViewInteractionHub.notifyFileSystemChanged(FileViewInteractionHub.java:585)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileViewInteractionHub.onFileChanged(FileViewInteractionHub.java:1088)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileOperationHelper$4.run(FileOperationHelper.java:218)
12-21 12:02:07.643: E/AndroidRuntime(28893): at net.micode.fileexplorer.FileOperationHelper$3.doInBackground(FileOperationHelper.java:164)
12-21 12:02:07.643: E/AndroidRuntime(28893): at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-21 12:02:07.643: E/AndroidRuntime(28893): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-21 12:02:07.643: E/AndroidRuntime(28893): ... 4 more
问题所在:Android4.4及以上版本中限制了只有系统应用才有权限发送广播(Android.intent.action.MEDIA_MOUNTED)通知系统扫描SD卡,非系统应用则无权限,一旦运行则出现上述异常。
解决方法:将net.micode.fileexplorer.FileViewInteractionHub.Java文件中的notifyFileSystemChanged()修改如下:
[java]
view plain
copy
private void notifyFileSystemChanged(String path) {
if (path == null)
return;
final File f = new File(path);
if (Build.VERSION.SDK_INT >= 19 /*Build.VERSION_CODES.KITKAT*/) { //添加此判断,判断SDK版本是不是4.4或者高于4.4
String[] paths = new String[]{Environment.getExternalStorageDirectory().toString()};
String[] paths = new String[]{path};
MediaScannerConnection.scanFile(mContext, paths, null, null);
} else {
final Intent intent;
if (f.isDirectory()) {
intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
4000
intent.setClassName("com.android.providers.media", "com.android.providers.media.MediaScannerReceiver");
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
Log.v(LOG_TAG, "directory changed, send broadcast:" + intent.toString());
} else {
intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(new File(path)));
Log.v(LOG_TAG, "file changed, send broadcast:" + intent.toString());
}
mContext.sendBroadcast(intent);
}
}
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 如何在 Linux 的 Nautilus 文件管理器中以管理员身份打开文件和文件夹
- 从源码安装Mysql/Percona 5.5
- 浅析Ruby的源代码布局及其编程风格
- asp.net 抓取网页源码三种实现方法
- JS小游戏之仙剑翻牌源码详解
- JS小游戏之宇宙战机源码详解
- jQuery源码分析之jQuery中的循环技巧详解
- 本人自用的global.js库源码分享
- java中原码、反码与补码的问题分析
- ASP.NET使用HttpWebRequest读取远程网页源代码
- PHP网页游戏学习之Xnova(ogame)源码解读(六)
- C#获取网页HTML源码实例
- PHP网页游戏学习之Xnova(ogame)源码解读(八)
- PHP网页游戏学习之Xnova(ogame)源码解读(四)
- JS小游戏之极速快跑源码详解
- 11款基于Javascript的文件管理器
- JS小游戏之象棋暗棋源码详解
- 浅析Android文件管理器(项目一)
- android源码探索之定制android关机界面的方法