1

アクティビティが表示されている間、メディアがデバイスにマウントまたは削除されたときに通知されるようにしたいと思います。残念ながら、これらの通知を受け取ることができませんでした。私が入手できるのはfoo!、簡単なテストとして作成したものだけです。

public class MyActivity extends AppCompatActivity {

  private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e(ActivityFamily.class.getName(), intent.getAction());
    }
  };

  @Override
  protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction("foo!");
    filter.addAction(Intent.ACTION_MEDIA_EJECT);
    filter.addAction(Intent.ACTION_MEDIA_REMOVED);
    filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
    filter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
    registerReceiver(receiver, filter);

    // just added this as a test for "foo!" action
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    manager.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 2000, PendingIntent.getBroadcast(this, 0, new Intent().setAction("foo!"), 0));
  }

  @Override
  protected void onPause() {
    super.onPause();
    unregisterReceiver(receiver);
  }
}

onReceiveデバイスからメディアを取り出したときに が呼び出されないのはなぜですか?

私は真新しいを作成してMyReceiver.javaで定義しようとしましたAndroidManifest.xmlが、それもうまくいきませんでした。

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_EJECT" />
        <action android:name="android.intent.action.MEDIA_REMOVED" />
        <action android:name="android.intent.action.MEDIA_MOUNTED" />
        <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" />
        <data android:scheme="file" />
    </intent-filter>
</receiver>
4

1 に答える 1

3

ここで答えを見つけました。file:インテント フィルターにスキームを追加する必要がありました。

registerReceiver追加を使用する前にfilter.addDataScheme("file");

マニフェストに登録されている静的ブロードキャスト レシーバーの場合<data android:scheme="file" />は、<intent-filter>.

于 2016-02-12T16:08:51.170 に答える