权限拒绝:不允许在android中发送广播
Posted
技术标签:
【中文标题】权限拒绝:不允许在android中发送广播【英文标题】:Permission Denial: not allowed to send broadcast in android 【发布时间】:2014-02-23 12:28:26 【问题描述】:我创建了一个简单的相机应用程序。它适用于除 android 4.4 之外的所有 Android 版本。从相机应用程序拍照时出现以下错误。
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=26089, uid=10120
出现错误:
在以下地方:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
如何解决 KITKAT 的这个问题?
告诉我!
谢谢!
【问题讨论】:
可能值得您花时间阅读其他类似的帖子。 ***.com/questions/17759041/… 【参考方案1】:如何解决 KITKAT 的这个问题?
那个代码从来都不合适。幸运的是,Android(最终)正在采取措施防止应用欺骗更多这样的系统广播。
如果您想告诉 Android 索引您放在外部存储上的文件,请使用 MediaScannerConnection
或 ACTION_MEDIA_SCANNER_SCAN_FILE
。
【讨论】:
我尝试使用像 pastebin.com/Fve98x6s 这样的 MediaScannerConnection 及其在 kitkat 设备中的工作,但不能在 android 4.3 及以下设备中工作。 @AndroidDev:我在较旧的 Android 设备上使用MediaScannerConnection
没有任何问题。
@AndroidDev 它在 android 4.3 及以下设备上对您有用吗?【参考方案2】:
我解决了这个问题,你可以用这个:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mediaMountUri));
希望对你有帮助!
【讨论】:
仅对媒体根路径不起作用。您需要传递实际更改文件的 URI,并且只会扫描该文件。【参考方案3】:Android 会阻止应用发送 ACTION_MEDIA_SCANNER_SCAN_FILE 或 ACTION_MEDIA_MOUNTED 等广播。 改用 MediaScannerConnection 的静态方法 scanFile。
MediaScannerConnection.scanFile(getApplicationContext(), new String[] file.getAbsolutePath() , null, new OnScanCompletedListener()
@Override
public void onScanCompleted(String path, Uri uri)
// TODO Auto-generated method stub
);
【讨论】:
这对我有用,可以让图像显示在画廊中。谢谢伊万。ACTION_MEDIA_MOUNTED
在 KitKat 中被锁定。 ACTION_MEDIA_SCANNER_SCAN_FILE
仍然是允许的,并且与您的代码基本相同,但仅扫描单个文件的限制相同。与意图的主要区别:没有回调,即使进程在它之前结束,扫描也会完成(不像MediaScannerConnection
)。【参考方案4】:
简短的回答:你不能,至少不容易。
过去,许多应用程序使用此意图在仅更改一个文件后重新扫描整个文件系统,这大大消耗了电池寿命。从 Android 4.4 开始,现在只有系统应用程序可以使用它。您可能必须找到不使用此意图的解决方法。
【讨论】:
你能给我一个解决办法吗?我找不到解决办法?以上是关于权限拒绝:不允许在android中发送广播的主要内容,如果未能解决你的问题,请参考以下文章
权限拒绝:广播 Intent act=android.provider.Telephony.SMS_RECEIVED
三星手机中的 Flutter 构建失败,权限被拒绝:来自 android 的广播要求以用户 -1 的身份运行,但从用户 0 调用