package org.music.player; import org.music.player.R; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.Environment; import android.preference.Preference; import android.util.AttributeSet; /** * A preference that allows the MediaScanner to be triggered. */ public class ScanPreference extends Preference { private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) { setSummary(R.string.scan_in_progress); setEnabled(false); } else if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) { setSummary(R.string.finished_scanning); setEnabled(true); context.unregisterReceiver(this); } } }; public ScanPreference(Context context, AttributeSet attrs) { super(context, attrs); setTitle(R.string.media_scan); setSummary(R.string.tap_to_scan); } @Override public void onClick() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); getContext().registerReceiver(mReceiver, intentFilter); Uri storage = Uri.parse("file://" + Environment.getExternalStorageDirectory()); getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, storage)); } }