19

RemoteControlClientはICSで導入されました。これが、ロック画面がさまざまな音楽プレーヤーと統合されているように見える方法です。ロック画面のSpotifyの例については、以下のスクリーンショットを参照してください。

ここに画像の説明を入力してください

ロック画面以外のアプリからも、上記のプレーヤーと統合できますか?

ドキュメントにはこのテーマについて少し欠けていると思いますが、可能であれば、結果は興味深いものになると思います。

編集:

これまでの進捗状況:なし。私が見つけたのは、IRemoteControlDisplayがその一部である可能性が高いということですが、Android / Javaのスキルは、それを実装してロック画面と同じ機能を実現する方法を実際に理解するには少し不足しています。

4

6 に答える 6

8

私のアプリで作業しているときに、実際に独自のRemoteControlDisplayを実装する方法を見つけました。

基本的に、メッセージを特別なハンドラーに送信するIRemoteControlDisplay $ Stubを拡張します。このハンドラーは、メタデータなどを更新します。次に、AudioManager#registerRemoteControlDisplay()を呼び出して、IRemoteControlDisplay$Stubから拡張された独自のクラスを登録します。

次に、AudioManager#unregisterRemoteControlDisplay()を呼び出して登録を解除します。

かなり複雑ですが、その方法についての記事を書きました。XDAで公開しました。ここで確認してください: http://forum.xda-developers.com/showthread.php?p = 44513199

于 2013-08-11T13:53:18.067 に答える
6

私はあなたがこれを行うことができると信じています。ただし、このメソッドはプライベートAPIを使用します(これは、Android OSの新しいバージョンでは機能しない可能性があることを意味します)。

Androidのソースコード(http://source.android.com/)にアクセスしてダウンロードし、ディレクトリ/ frameworks / base / media / java / android/mediaを確認することをお勧めします。

それはあなたの興味のあるポイントであるいくつかのファイルを持っています:AudioManager.java

AudioService.java

IRemoteControlClient.aidl

IRemoteControlDisplay.aidl

オーディオマネージャには、registerRemoteControlDisplayと呼ばれる文書化されていないパブリックメソッドがあります。リフレクションを通じてアクセスできるはずです。

このインターフェイスを使用すると、IRemoteControlDisplay(別の文書化されていないインターフェイス)を実装するオブジェクトを登録でき、このオブジェクトを介してプレーヤーを制御できるはずです。

于 2012-08-31T15:02:36.513 に答える
5

これを試して

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
                AudioManager.AUDIOFOCUS_GAIN);
        Bitmap AlbumArt=BitmapFactory.decodeResource(getResources(), R.drawable.alislahthumbmain);
        mIslahReceiverComponent=new ComponentName(this,AlIslahReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(mIslahReceiverComponent);
        Intent mediaButtonIntent=new Intent(Intent.ACTION_MEDIA_BUTTON);
        mediaButtonIntent.setComponent(mIslahReceiverComponent);
        PendingIntent mediaPendingIntent=PendingIntent.getBroadcast(getApplicationContext(),
                0,mediaButtonIntent,0);
        RemoteControlClient mRemoteControlClient=new RemoteControlClient(mediaPendingIntent);
        mRemoteControlClient.editMetadata(true)
        .putString(MediaMetadataRetriever.METADATA_KEY_TITLE,AlIslahApplication.getStreamTitle())
        .putBitmap(100,AlbumArt)
        .apply();
        mRemoteControlClient.setPlaybackState(
                RemoteControlClient.PLAYSTATE_PLAYING);
        mRemoteControlClient.setTransportControlFlags(
               RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE|
                RemoteControlClient.FLAG_KEY_MEDIA_STOP);
        audioManager.registerRemoteControlClient(mRemoteControlClient);
于 2012-09-04T07:22:30.803 に答える
3

ロック画面と同じ表示要求を取得することはできませんが、この画面のボタンがブロードキャストインテントで行うのと同じイベントを確実にトリガーできます。

問題のアクションはACTION_MEDIA_BUTTONであり、必要なことを実行するには、適切なkeyCodeを使用してKeyEventをアタッチする必要があります。

Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
            KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE));
sendBroadcast(intent);

これは、ロック画面の再生/一時停止ボタンを押すのと同じことを行います。これは、意味のある他のKeyEventキーコード(KEYCODE_MEDIA_NEXTなど)を使用して行うことができますが、ロック画面では、現在再生中のトラックがサポートとして登録されているかどうかはわかりません。

于 2013-03-07T15:58:16.600 に答える
2

KitKatのリリース後にこの質問RemoteControllerに出くわした人は、RemoteControlClientsに接続してそれらを制御できるを使用できるようになりました。

于 2014-05-27T08:41:48.963 に答える
0

アプリにIRemoteControl*.aidlインターフェースを実装する必要があり、アプリ(Spotifyなど)はアプリに登録する必要がありますが、まだそうではありません。彼らは自分自身をAudioManagerに登録します。したがって、いいえ、アプリ(Spotifyなど)を変更するか、Androidシステムを変更してアプリがRemoteClientとそのデータを取得できるようにしない限り、これらのRemoteClient登録を取得することはできません。

于 2012-09-06T12:00:31.667 に答える