Pages

Wednesday, March 25, 2015

Android Programming - Scan Media/SD Card

Saya memiliki permasalahan sebagai berikut:
Saya menyimpan sebuah gambar pada sd card, tetapi gambar yg baru saja saya simpan tersebut tidak langsung muncul pada gallery. Agar gallery dapat menampilkan gambar yang baru saya simpan tersebut, saya harus mencabut dan memasukan ulang sd card (memory external).
    Setelah googling kesana kemari, akhirnya saya menemukan beberapa solusi sebagai berikut:
    1. Menggunakan constant ACTION_MEDIA_MOUNTED dari class Intent.
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
      

      Statement di atas akan mengirimkan broadcast action untuk me-refresh/ scan seluruh media. Hal ini biasanya dijalankan pada saat device pertama di hidupkan atau pada saat anda memasukan kartu memory.

      2. Menggunakan class MediaScannerConnection dan MediaScannerConnectionClient. Class ini menyediakan cara untuk mendeteksi file tertentu yang baru ditambahkan ke media. Media Scanner akan membaca metadata dari file tersebut dan menambahkannya ke media content provider, sehingga gallery akan mengetahui bahwa ada file yang baru ditambahakan. Class ini tidak akan me-refresh/ scan seluruh media, tetapi hanya file tertentu. Berikut contoh implementasinya.

      package com.deborahproject.galleryguard.utility;
      
      import android.content.Context;
      import android.media.MediaScannerConnection;
      import android.media.MediaScannerConnection.MediaScannerConnectionClient;
      import android.net.Uri;
      
      public class MediaScannerUtil implements MediaScannerConnectionClient {
      
       private Context mContext;
       private MediaScannerConnection mConnection;
       private String mPath;
       private String mMimeType;
      
       public MediaScannerUtil(Context context, String path, String mimeType) {
        mContext = context;
        mPath = path;
        mMimeType = mimeType;
        mConnection = new MediaScannerConnection(context, this);
        mConnection.connect();
       }
      
       @Override
       public void onMediaScannerConnected() {
        mConnection.scanFile(mPath, mMimeType);
       }
      
       @Override
       public void onScanCompleted(String path, Uri uri) {
        // OPTIONAL: scan is complete, this will cause the viewer to render it
        /**
         * try { if (uri != null) { Intent intent = new
         * Intent(Intent.ACTION_VIEW); intent.setData(uri);
         * mContext.startActivity(intent); } } finally {
         */
      
        mConnection.disconnect();
        mContext = null;
      
       }
      }
      

      No comments:

      Post a Comment

      Related Posts Plugin for WordPress, Blogger...