本文主要是介绍解决android4.4中 Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在最近自己写的一个项目中, 遇到了这样一个问题,扫描系统SD卡中的图片文件,并按照时间进行排序,通常就是发送一个特定的广播Intent.ACTION_MEDIA_MOUNTED来通知系统执行扫描,例如
- mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, <span style="font-family: Arial, Helvetica, sans-serif;">Uri.parse("file://" + Environment.getExternalStorageDirectory())));</span>
- 07-08 13:34:24.211: W/System.err(23751): Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast <a href="http://lib.csdn.net/base/15" class="replace_word" title="undefined" target="_blank" style="color:#df3434; font-weight:bold;">android</a>.intent.action.MEDIA_MOUNTED from pid=23751, uid=10246
- <protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" />
4.4 之前:
- private LinkedList<PictureItem> getPictureBeforeKK()
- {
- LinkedList<PictureItem> items = null;
- mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
- Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
- ContentResolver mContentResolver = mContext.getContentResolver();
- Cursor mCursor = mContentResolver.query(mImageUri, null, null, null, MediaStore.Images.Media.DATE_ADDED);
- if (mCursor != null && mCursor.getCount() > 0)
- {
- items = new LinkedList<PictureItem>();
- mCursor.moveToFirst();
- while (mCursor.moveToNext())
- {
- // 获取图片的路径
- String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));
- // 获取图片的添加到系统的毫秒数
- long time = mCursor.getLong(mCursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));
- PictureItem item = new PictureItem(path, parseTimeToYMD(time));
- System.out.println("item = " + item);
- items.add(item);
- }
- mCursor.close();
- }
- return items;
- }
- private LinkedList<PictureItem> getPictureInKK()
- {
- LinkedList<PictureItem> items = null;
- mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
- Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
- ContentResolver mContentResolver = mContext.getContentResolver();
- Cursor mCursor = mContentResolver.query(mImageUri, null, null, null, MediaStore.Images.Media.DATE_ADDED);
- if (mCursor != null && mCursor.getCount() > 0)
- {
- items = new LinkedList<PictureItem>();
- mCursor.moveToFirst();
- while (mCursor.moveToNext())
- {
- // 获取图片的路径
- String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));
- // 获取图片的添加到系统的毫秒数
- long time = mCursor.getLong(mCursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));
- PictureItem item = new PictureItem(path, parseTimeToYMD(time));
- System.out.println("item = " + item);
- items.add(item);
- }
- mCursor.close();
- }
- return items;
- }
- public String parseTimeToYMD(long time)
- {
- System.setProperty("user.timezone", "Asia/Shanghai");
- TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
- TimeZone.setDefault(tz);
- SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
- return format.format(new Date(time * 1000L));
- }
这篇关于解决android4.4中 Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!