Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

当在Android4.4上进行图片的扫描功能开发时一般会使用:sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()+ picPath)));的广播

因为Android4.4中限制了系统应用才有权限使用广播通知系统扫描SD卡,所以会抛题目异常。

解决方法:使用MediaScannerConnection执行具体文件或文件夹进行扫描,核心代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 判断SDK版本是不是4.4或者高于4.4
	String[] paths = new String[]{Environment.getExternalStorageDirectory().toString()};
	MediaScannerConnection.scanFile(mContext, paths, null, null);
} else {
	final Intent intent;
	if (f.isDirectory()) {
		intent = new Intent(Intent.ACTION_MEDIA_MOUNTED);
		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);
}

可参考:

http://blog.csdn.net/eoeAndroida/article/details/41806525

http://www.itstrike.cn/Question/0fd8e064-dadc-487b-be73-de6bb0e329b3.html

http://stackoverflow.com/questions/24072489/java-lang-securityexception-permission-denial-not-allowed-to-send-broadcast-an

http://www.thinksaas.cn/group/topic/219309/

时间: 2024-10-28 14:11:31

Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED的相关文章

关于 Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from 错误原因

当在Android4.4上进行图片的扫描功能开发时一般会使用:sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()+ picPath)));的广播 但因为Android4.4中限制了系统应用才有权限使用广播通知系统扫描SD卡,所以会报上面的错误. 解决方法:使用MediaScannerConnection执行

Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.HEADSET_PLUG

crash information:Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.HEADSET_PLUG from    at android.os.Parcel.readException(Parcel.java:1465)     at android.os.Parcel.readException(Parcel.j

Android问题集锦之三十八:not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

当我们保存图片后就会发个通知告诉系统让sdcard重新挂载,这样其他程序就会立即找到这张图片. Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_MOUNTED); intent.setData(Uri.fromFile(Environment .getExternalStorageDirectory())); sendBroadcast(intent); 但是到了Android4.4就不灵了,Google将ME

Permission Denial: not allowed to send broadcast in android

因为最近项目里Intent用到了广播"android.intent.action.MEDIA_MOUNTED", 结果被提示权限不足, 查了下原因, 是因为从4.4开始, 官方开始限制这个广播的使用, 加上了 protected权限, 只能系统内部使用. 如下: <protected-broadcast android:name="android.intent.action.MEDIA_MOUNTED" /> 想想也在情理之中, 否则就是因为需要加载一张

转android intent action 介绍大全

一些常用的Intent: Uri Action 功能 备注 geo:latitude,longitude Intent.ACTION_VIEW 打开地图应用程序并显示指定的经纬度   geo:0,0?q=street+address Intent.ACTION_VIEW 打开地图应用程序并显示指定的地址   http://web_address Intent.ACTION_VIEW 打开浏览器程序并显示指定的URL   https://web_address Intent.ACTION_VIEW

Android intent action大全

android.intent.action.ALL_APPSandroid.intent.action.ANSWERandroid.intent.action.ATTACH_DATAandroid.intent.action.BUG_REPORTandroid.intent.action.CALLandroid.intent.action.CALL_BUTTONandroid.intent.action.CHOOSERandroid.intent.action.CREATE_LIVE_FOLDE

Android Intent Action 大全

ACTION_AIRPLANE_MODE_CHANGED Broadcast Action:用户打开或关闭飞行模式.一个或多个广播会打开或关闭.这个intent会携带下面的附加值: state:一个boolean值,指明飞行模式是否打开.如果是true,cell radio以及其他一些例如蓝牙,wifi的广播会关闭. 注:这是一个只有系统可以发送的受保护的intent. 常量值:"android.intent.action.AIRPLANE_MODE" ACTION_ALL_APPS

拨号操作——android.intent.action.CALL

button_14.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { editText=(EditText)findViewById(R.id.editText); textContent=editText .getText().toString(); if(!"" .equals(textContent)){ //文本框中内容非空时执行删除操作 Intent

android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解

第一种情况:有MAIN,无LAUNCHER,程序列表中无图标 原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 第二种情况:无MAIN,有LAUNCHER,程序列表中无图标 原因:android.intent.action.MAIN决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现 console里面两种情况显示一样: 下面看一个应用程序可以有两个Activity的情况 点击(此处)折