8

ヘッドセットまたは車のコントロール (再生/一時停止など) からメディア ボタン イベントを受信しようとしています。

これは私のアプリマニフェストにあります。

<service android:name=".mediaPlayerService.MediaPlayerService"
         android:exported="true">
    <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService"/>
    </intent-filter>
</service>

<!--
A receiver that will receive media buttons and send as
intents to your MediaBrowserServiceCompat implementation.
Required on pre-Lollipop. More information at
http://developer.android.com/reference/android/support/v4/media/session/MediaButtonReceiver.html
-->
<receiver android:name="android.support.v4.media.session.MediaButtonReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON"/>
    </intent-filter>
</receiver>

これは私の MediaPlayerService の一部です

public class MediaPlayerService extends MediaBrowserServiceCompat {

@Override
public void onCreate()
{
    super.onCreate();
    initMediaSessions();
}

private void initMediaSessions()
{
    mSession = new MediaSessionCompat(getApplicationContext(), MediaPlayerService.class.getSimpleName());
    setSessionToken(mSession.getSessionToken());

    mSession.setCallback(new MediaSessionCompat.Callback()
                         {
                            //callback code is here.     
                         }            
    );
}

@Override
public int onStartCommand(Intent startIntent, int flags, int startId)
{
    if (startIntent != null)
    {
        // Try to handle the intent as a media button event wrapped by MediaButtonReceiver
        MediaButtonReceiver.handleIntent(mSession, startIntent);
    }
    return START_STICKY;
}

何かが足りないようです。ヘッドセット コントロールの一時停止ボタンを押しても、onStartCommand が呼び出されません。

これが期待どおりに機能しない理由は何ですか?

4

1 に答える 1

13

メディア再生 I/O 2016 トークのベスト プラクティスで説明されているように、次の呼び出しも行う必要があります。

mSession.setFlags(
  MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
  MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

メディア セッションを作成し、再生を開始する前に、ドキュメントに従ってsetActive(true)を呼び出す必要があります。

メディア ボタン イベントまたはトランスポート コマンドの受信を開始するには、セッションをアクティブに設定する必要があります。

PlaybackStateCompat.BuilderでsetActions()を呼び出して、サポートするアクションを正確に指定する必要があることに注意してください。これを設定しないと、メディア ボタンに関連するコールバックを取得できません。

于 2016-07-07T19:42:20.117 に答える