Android的远程控制客户端

Fra*_*ans 19 java android

RemoteControlClient在ICS推出.这就是锁屏似乎与各种音乐播放器融为一体的方式.有关锁定屏幕上的Spotify示例,请参阅下面的屏幕截图.

在此输入图像描述

可以从锁定屏幕以外的其他应用程序中集成所有玩家吗?

我发现文档在这个问题上缺乏一点点,但我认为如果可能的话,结果可能会很有趣.

编辑:

到目前为止的进展:没有.我发现的是IRemoteControlDisplay可能在其中有一部分,但我的Android/Java技能有点缺乏实际了解如何实现它并实现与锁定屏幕相同的功能.

Ale*_*ock 8

在处理我的应用程序时,我实际上已经找到了如何实现自己的RemoteControlDisplay.

基本上,您扩展了IRemoteControlDisplay $ Stub,它将消息发送到特殊处理程序,此处理程序更新元数据和事物.然后通过调用AudioManager #registerRemoteControlDisplay()注册从IRemoteControlDisplay $ Stub扩展的自己的类.

然后通过调用AudioManager #unregisterRemoteControlDisplay()取消注册它.

它相当复杂,但我写了一篇关于如何做到这一点的文章.我已经在XDA上发布了它,请在这里查看:http: //forum.xda-developers.com/showthread.php?p = 45513199

  • 此外,您现在可以使用我的库,这将使过程变得非常简单:http://forum.xda-developers.com/showthread.php?p = 45288378 (2认同)

Vic*_*nin 5

我相信你可以做到这一点.但是,该方法将使用私有API(暗示它可能不适用于某些更高版本的Android OS).

我建议去下载Android源代码(http://source.android.com/)并检查目录/ frameworks/base/media/java/android/media

它有几个你感兴趣的文件:AudioManager.java

AudioService.java

IRemoteControlClient.aidl

IRemoteControlDisplay.aidl

音频管理器有公共方法,没有记录,称为registerRemoteControlDisplay.您应该能够通过反射访问它.

使用此接口,您可以注册实现IRemoteControlDisplay的对象(另一个未记录的接口),您应该能够通过此对象控制播放器.


小智 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);
Run Code Online (Sandbox Code Playgroud)

  • 问题不在于如何使用“RemoteControlClient”。 (2认同)