Android:保存新图像后刷新图库

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):

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);
  }
    });
Run Code Online (Sandbox Code Playgroud)


小智 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)


Yyy*_*Yyy 7

尝试以下一种方法:将文件保存到文件夹后,编写以下代码

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your image path"))));
Run Code Online (Sandbox Code Playgroud)


San*_*ani 5

下面的代码可在保存图像后使用所有设备刷新图库。

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)