Android - 从小部件与设备的音乐应用程序交互

时间:2011-07-22 11:49:53

标签: android

我意识到音乐应用程序可能会有所不同,具体取决于设备,但我正在为自己的设备编写此应用程序。

我是否认为我需要使用我的小部件创建服务,然后以某种方式将此服务绑定到com.android.music.MediaPlaybackService?

我没有找到很多有用的文档,但在市场上看,有很多小部件可以做同样的事情。我已经看到一些StackOverflow的答案说这是不可能的,但与此同时,我已经安装了几个完全正确的小部件。

有没有人做过类似的事情,可以指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

这不是不可能的,但它没有文档记录且不受支持。此外,您的假定方法将无效,因为该服务不再基于the source code导出。它在大约10个月前被锁定在源中,所以它可能不会出口在Gingerbread和Honeycomb上。

答案 1 :(得分:0)

至少从Android 2.2.2开始,这种方法确实有效。

我为我的小部件创建了一个服务。此服务的onCreate绑定到com.android.music.IMediaPlaybackService。

此服务的onStart检查“command”标志,并相应地通过私有ServiceConnection运行绑定服务的适当方法,然后密钥在每个命令后清除连接,例如:

private ServiceConnection mConnection = new ServiceConnection(){
        public void onServiceConnected(ComponentName className,
                IBinder service) {
            mService = IMediaPlaybackService.Stub.asInterface(service);

            //Toast.makeText(getApplicationContext(), "!!!", Toast.LENGTH_SHORT).show();
            try {
                if (mService.isPlaying()) {
                    mService.pause();
                } else {
                    mService.play();
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
            unbindService(mConnection);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            // TODO Auto-generated method stub
            mService = null;
        }

    };