Android How to use MediaScannerConnection scanFile

前端 未结 8 1658
醉梦人生
醉梦人生 2020-11-22 07:20

Im adding images to a folder on the SDCARD. Since the images and my folder is not immediately visible in the Gallery im trying to get the MediaScannerConnection to update an

相关标签:
8条回答
  • 2020-11-22 07:37

    I realized that perhaps you were looking for a solution what would work previous to api level 8, and I could not make sense of Mitch's answer. I solved it by building a class for scanning a single file:

    import java.io.File;
    import android.content.Context;
    import android.media.MediaScannerConnection;
    import android.media.MediaScannerConnection.MediaScannerConnectionClient;
    import android.net.Uri;
    
    public class SingleMediaScanner implements MediaScannerConnectionClient {
    
        private MediaScannerConnection mMs;
        private File mFile;
    
        public SingleMediaScanner(Context context, File f) {
            mFile = f;
            mMs = new MediaScannerConnection(context, this);
            mMs.connect();
        }
    
        @Override
        public void onMediaScannerConnected() {
            mMs.scanFile(mFile.getAbsolutePath(), null);
        }
    
        @Override
        public void onScanCompleted(String path, Uri uri) {
            mMs.disconnect();
        }
    
    }
    

    and you would use it like this to make the MediaScannerConnection scan a single file:

    new SingleMediaScanner(this, file);
    
    0 讨论(0)
  • 2020-11-22 07:37

    I was looking for the same thing and I found this in the ApiDemos, ExternalStorage. Solved all my problems as it scans a single file.

     MediaScannerConnection.scanFile(this,
              new String[] { file.toString() }, null,
              new MediaScannerConnection.OnScanCompletedListener() {
          public void onScanCompleted(String path, Uri uri) {
              Log.i("ExternalStorage", "Scanned " + path + ":");
              Log.i("ExternalStorage", "-> uri=" + uri);
          }
     });
    
    0 讨论(0)
  • 2020-11-22 07:45
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
                + Environment.getExternalStorageDirectory()))); 
    
    0 讨论(0)
  • 2020-11-22 07:47
    File file = new File(absolutePath);
    Uri uri = Uri.fromFile(file);
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
    sendBroadcast(intent);
    
    0 讨论(0)
  • 2020-11-22 07:50

    Do not do the sendBroadcast if you only want one image to appear in the gallery. That'd be a huge waste of resources. You'll need to make a MediaScannerConnectionClient and then call connect() on the MediaScannerConnection you make from it to scan the file. Here's an example:

    private MediaScannerConnectionClient mediaScannerConnectionClient = 
        new MediaScannerConnectionClient() {
    
        @Override
        public void onMediaScannerConnected() {
            mediaScannerConnection.scanFile("pathToImage/someImage.jpg", null);
        }
    
        @Override
        public void onScanCompleted(String path, Uri uri) {
            if(path.equals("pathToImage/someImage.jpg"))
                mediaScannerConnection.disconnect();
        }
    };
    new MediaScannerConnection(context, mediaScannerConnectionClient).connect();
    
    0 讨论(0)
  • 2020-11-22 07:53

    Let your activity implement 'MediaScannerConnectionClient' and add this to your activity:

    private void startScan() 
    { 
        if(conn!=null) conn.disconnect();  
        conn = new MediaScannerConnection(YourActivity.this,YourActivity.this); 
        conn.connect(); 
    } 
    
    @Override 
    public void onMediaScannerConnected() { 
        try{
            conn.scanFile(yourImagePath, "image/*");
           } catch (java.lang.IllegalStateException e){
           }
    }
    
    @Override 
    public void onScanCompleted(String path, Uri uri) { 
        conn.disconnect(); 
    } 
    
    0 讨论(0)
提交回复
热议问题