BHe*_*cks 18 android gallery mediastore
因此,在我的应用程序中,我一度将一堆图像保存到临时文件夹中,我希望它们立即显示在图库中.重新启动,他们这样做,但否则他们没有.
我尝试过使用sendBroadcast方法:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)
但我得到一个权限错误:
E/AndroidRuntime( 2628): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=2628, uid=10068
Run Code Online (Sandbox Code Playgroud)
我可以在AndroidManifest中丢失权限,还是不再支持?谢谢
ymo*_*raS 19
Petrus在另一个答案中提供的代码在Kitkat上有效(4.4):
Run Code Online (Sandbox Code Playgroud)MediaScannerConnection.scanFile(this, new String[] { Environment.getExternalStorageDirectory().toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { /* * (non-Javadoc) * @see android.media.MediaScannerConnection.OnScanCompletedListener#onScanCompleted(java.lang.String, android.net.Uri) */ public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } });
小智 8
我试过了Environment.getExternalStorageDirectory().toString(),但没找到我的自定义文件夹.
我只想分享我的经验来解决这个问题.
最后,我已经MediaScannerConnection配置为一次扫描一个文件,现在丢失了存放这些图像的文件夹.每次我下载每个图像时,我都会调用MediaScannerConnection文件路径为Uri而不是文件夹本身.
此外,许多人问为什么sendBroadcast停止使用kitkat并且答案是sendBroadcast滥用并且被调用太多次并导致系统耗尽电池或减速,因此他们取消了直接呼叫以防止有意义的滥用.我希望将上述解决方案用于包含所有图像的文件夹,但它不适用于该文件夹.我希望找到文件夹会暴露自定义文件夹中的其他文件,但它不是我的情况.我希望将来找到更好的答案......
这是我的代码片段.
MediaScannerConnection.scanFile(ApplicationContext.context, new String[] { imageFile.getPath() }, null,
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.i(TAG, "Scanned " + path);
}
});
Run Code Online (Sandbox Code Playgroud)
尝试以下一种方法:将文件保存到文件夹后,编写以下代码
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your image path"))));
Run Code Online (Sandbox Code Playgroud)
下面的代码可在保存图像后使用所有设备刷新图库。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f1 = new File("file://" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
Uri contentUri = Uri.fromFile(f1);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
} else {
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your image path"))));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22853 次 |
| 最近记录: |