onReceiveで受け取る引数intentのdataにはマウントorリマウントされたストレージのパスが格納されています。
通知されるパスは下記のようなコードで確認できます。
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Uri data = intent.getData();
String path = null;
if (data != null) {
path = data.getPath();
}
android.util.Log.e("test", "path=" + path);
if ("/mnt/sdcard/xxx".equals(path)
&& Intent.ACTION_MEDIA_EJECT.equals(intent.getAction())) {
// ...
}
}
};
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addDataScheme("file");
registerReceiver(mReceiver, filter);
}
Galaxy Nexusなど、端末の内部ストレージとしてSDがマウントされているものが発売される傾向にあります。クラウドの流行も後押しし、今後はmicroSDが搭載されない端末や内蔵ストレージ搭載の端末が増えてくるもの
と思われます。
内部ストレージ以外の他メディアがマウントされた場合もACTION_MEDIA_*系の通知がくるため、
異なるメディアストレージのパスに対して処理されるのが困るようなケースでは
Environment.getExternalStorageDirectory()等を利用してパスのチェックを行うのが良いでしょう。