Android 安卓-与设备交互';来自widget的音乐应用程序

Android 安卓-与设备交互';来自widget的音乐应用程序,android,Android,我意识到音乐应用程序可能是相同的,也可能不是相同的,这取决于设备,但我正在为自己的设备编写此应用程序 我是否正确地认为我需要用我的小部件创建一个服务,然后以某种方式将此服务绑定到com.android.music.MediaPlaybackService 我没有找到多少关于这方面的有用文档,但从市场上看,有很多小部件可以做同样的事情。我已经看到一些StackOverflow的回答说这是不可能的,但同时,我已经安装了几个小部件,正好可以做到这一点 有没有人做过类似的事情,可以为我指明正确的方向?这

我意识到音乐应用程序可能是相同的,也可能不是相同的,这取决于设备,但我正在为自己的设备编写此应用程序

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

我没有找到多少关于这方面的有用文档,但从市场上看,有很多小部件可以做同样的事情。我已经看到一些StackOverflow的回答说这是不可能的,但同时,我已经安装了几个小部件,正好可以做到这一点


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

这并不是说这不可能,而是因为它没有记录在案,而且不受支持。此外,您假定的方法也行不通,因为该服务不再基于导出。大约10个月前,它被锁定在源代码中,因此它可能不会在姜饼和蜂窝上导出。

至少在安卓2.2.2中,这种方法是有效的

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

此服务的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;
        }

    };

这是不幸的。不过我有弗罗约。我一直在查看AOSP音乐应用程序和开源Last.FM应用程序的源代码,乍一看,Last.FM似乎在做我打算做的事情,但你是说所有这些应用程序都不能在姜饼和更高版本上工作吗?@aperture:我是说根据源代码,大约10个月前,该服务被标记为未出口。我不确定这种改变是否会使它变成姜饼和蜂窝状,但似乎有可能。