10

BroadcastReceiverを使用してメディアボタンの1つ(ヘッドセットから「再生ボタン」)をキャプチャするサービスを作成しました。これは、Android 2.3.x(HTC NexusOneまたはHTCDesire)で完全に機能します。

Android 4.0.3(Samsung Nexus S)で実行しようとすると、機能しません(アプリケーションがインテント「android.intent.action.MEDIA_BUTTON」を受信せず、「再生」ボタンが通常どおり動作します:停止/開始音楽)。

マニフェストの内容:

...
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <receiver android:name=".buttonreceiver.MediaButtonIntentReceiver" >
        <intent-filter android:priority="10000" >
            <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
    </receiver>
...

Android4.0.3で動作させる方法はありますか


編集:提案されたソリューションを試し、アクションを追加して実行しましたが、レシーバーがまだインテントを受信して​​いません。さらに奇妙なことに、コードによるレシーバーの登録も機能しません。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.about_and_activation_view);

    Log.d("MR", "onCreate - " + getIntent().getAction());

    mReceiver = new MediaButtonIntentReceiver();
    registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_MEDIA_BUTTON));
}

今、私は完全に混乱しています。

4

2 に答える 2

13

アプリにアクティビティがあること、およびユーザーがそのボタンを押す前にこのアクティビティを実行していることを確認してください。それまでは、<receiver> 放送は受信されません


アップデート

Android 4.0以降では、イベントを受信するために電話registerMediaButtonEventReceiver()AudioManagerかける必要があるようです。その状態は、他の何かが呼び出さregisterMediaButtonEventReceiver()れるまで、またはあなたが呼び出すまで保持されますunregisterMediaButtonEventReceiver()

たとえば、次のようなアクティビティは次のとおりです。

public class MediaButtonActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ((AudioManager)getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(new ComponentName(
                                                                                                       this,
                                                                                                       MediaButtonReceiver.class));
  }
}

マニフェスト登録MediaButtonReceiverを有効にして、ACTION_MEDIA_BUTTONイベントを取得します。

于 2012-05-10T15:46:15.343 に答える
2

アプリをデフォルトにしたいが、ボタンを押しても何もする必要がない場合は、次の方法を使用できます。

これをマニフェストファイル(「アプリケーション」ノード内)に追加します。

    <receiver android:name="BroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_BUTTON" />
        </intent-filter>
</receiver>

これをメインアクティビティのonCreate()に追加するか、アプリの実行時に呼び出される任意の場所に追加します。onResume()イベントでも役立つ可能性があります。

    mAudioManager =  (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder = new ComponentName(getActivity().getPackageName(), BroadcastReceiver.class.getCanonicalName());

    mAudioManager.registerMediaButtonEventReceiver(mRemoteControlResponder);
于 2013-11-21T00:32:03.030 に答える