我创建了一个简单的相机应用程序。除了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解决此问题?
让我知道!
谢谢!
答案 0 :(得分:19)
如何为KITKAT解决此问题?
该代码从未适用。幸运的是,Android(最终)采取措施阻止应用程序欺骗更多类似的系统广播。
如果您想告诉Android索引您放在外部存储上的文件,请使用MediaScannerConnection
或ACTION_MEDIA_SCANNER_SCAN_FILE
。
答案 1 :(得分:10)
我解决了这个问题,你可以用这个:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, mediaMountUri));
希望这可以帮到你!
答案 2 :(得分:4)
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
}
});
答案 3 :(得分:2)
简短回答:你不能,至少不容易。
许多应用程序过去常常在更改一个文件后使用此意图重新扫描整个文件系统,这大大耗尽了电池寿命。从Android 4.4开始,只有系统应用程序现在可以使用它。您可能必须找到不使用此意图的解决方法。