package net.rdrei.android.scdl2.service; import roboguice.util.Ln; import android.app.Service; import android.content.Intent; import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; import android.os.IBinder; /** * Calls the MediaScanner with the given path. * * This is necessary in order to get called from the BroadcastReceive which may * not be able to bind to a system service. * * @author pascal * */ public class MediaScannerService extends Service implements MediaScannerConnectionClient { public static final String EXTRA_PATH = "path"; private MediaScannerConnection mScannerConnection; private String mPath; @Override public void onCreate() { mScannerConnection = new MediaScannerConnection(this, this); } @Override public IBinder onBind(final Intent intent) { return null; } @Override public int onStartCommand(final Intent intent, final int flags, final int startId) { if (intent == null) { stopSelf(); } else { mPath = intent.getStringExtra(EXTRA_PATH); mScannerConnection.connect(); } return START_STICKY; } @Override public void onMediaScannerConnected() { Ln.d("Starting media scan for new file %s", mPath); mScannerConnection.scanFile(mPath, null); } @Override public void onScanCompleted(final String path, final Uri uri) { Ln.d("Media scan completed."); stopSelf(); } @Override public void onDestroy() { if (mScannerConnection != null) { mScannerConnection.disconnect(); mScannerConnection = null; } super.onDestroy(); } }