0

メディアボタンを長押ししたときにアクティビティを起動する方法を知りたいです。この場合、デフォルトのアクティビティを起動したくありません。メディア リーダーは、メディア ボタンが短く押されたときに起動し続ける必要があります。

希望、私は明示的でした。

アル

補助的な質問: 検索ボタンなどの一部のハード キーは、manifest.xml の activity 属性でそれを指定してアクティビティを直接起動でき、メディア ボタンなどの他のハード キーはブロードキャスト アクションに対してのみ言及されるのはなぜですか?

4

1 に答える 1

7

あなたがする必要があるのはこれだと思います:

  1. これをマニフェストに追加します。

    <receiver android:name="com.example.MediaButtonReceiver">
       <intent-filter android:priority="1000000000">
        <action android:name="android.intent.action.MEDIA_BUTTON" />
       </intent-filter>
        </receiver>
    
  2. クラスを作成しますMediaButtonReceiver

    public class MediaButtonReceiver extends BroadcastReceiver {
        public void onReceive(Context context, Intent intent) {
            String intentAction = intent.getAction();
            if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
                    KeyEvent event = (KeyEvent)
                    intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
    
            if (event == null) {
                return;
            }
    
            int keycode = event.getKeyCode();
            int action = event.getAction();
            long eventtime = event.getEventTime();
    
            if (keycode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || keycode == KeyEvent.KEYCODE_HEADSETHOOK) {
                if (action == KeyEvent.ACTION_DOWN) {
                    // Start your app here!
    
                    // ...
    
                    if (isOrderedBroadcast()) {
                        abortBroadcast();
                    }
                }
            }
        }
    }
    

私は主にここからこれをコピーしました: https ://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MediaButtonIntentReceiver.java

MEDIA_BUTTONまた、これは注文された放送に依存しますが、そうであると思います。優先度は、メディア アプリよりも高いものに設定する必要があります。残念ながら、メディアアプリはデフォルトの優先度を使用しており、ドキュメントにはそれが何であるかは記載されていません (驚くべきことです)。

于 2011-03-28T15:52:37.650 に答える