MediaPlaybackservice能否用于获取android中当前正在播放的音频文件的信息?
我写了一个类来处理android中的MediaPlaybackService。但代码不起作用 我绑定serviceconnection的代码如下:MediaPlaybackservice能否用于获取android中当前正在播放的音频文件的信息?,android,media-player,Android,Media Player,我写了一个类来处理android中的MediaPlaybackService。但代码不起作用 我绑定serviceconnection的代码如下: Intent in = new Intent(); in.setClassName("com.android.playerapps","com.android.playerapps.MediaPlayerServiceConnection"); Ser
Intent in = new Intent();
in.setClassName("com.android.playerapps","com.android.playerapps.MediaPlayerServiceConnection");
ServiceConnection conn = new MediaPlayerServiceConnection();
ctx.bindService(in, conn, 0);
public class MediaPlayerServiceConnection implements ServiceConnection {
IMediaPlaybackService mService;
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("MediaPlayerServiceConnection", "Connected! Name: " +name.getClassName());
// This is the important line
mService = IMediaPlaybackService.Stub.asInterface(service);
// Process org.videolan.vlc.android with component org.videolan.vlc.android.AudioService
System.out.println( "---------------- track:");
// If all went well, now we can use the interface
try {
if (mService.isPlaying())
{
//String str=getTrackName();
//String str=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()+"/"+mService.getPath();
System.out.println( "Playing track: "+this.getTrackName());
Log.i("MediaPlayerServiceConnection", "Music player is playing.");
}
else
{
Log.i("MediaPlayerServiceConnection", "Music player is not playing.");
}
}
catch (Exception e) {
e.printStackTrace();
//throw new RuntimeException(e);
}
}
public void onServiceDisconnected(ComponentName name) {
Log.i("MediaPlayerServiceConnection", "Disconnected!");
}
public String getTrackName() {
try {
return ( mService.getTrackName() );
} catch (RemoteException e) {
Log.e("MediaConnection", "Failed to get TrackName");
return "Failed to get TrackName";
}
}
ServiceConnection类如下所示:
Intent in = new Intent();
in.setClassName("com.android.playerapps","com.android.playerapps.MediaPlayerServiceConnection");
ServiceConnection conn = new MediaPlayerServiceConnection();
ctx.bindService(in, conn, 0);
public class MediaPlayerServiceConnection implements ServiceConnection {
IMediaPlaybackService mService;
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("MediaPlayerServiceConnection", "Connected! Name: " +name.getClassName());
// This is the important line
mService = IMediaPlaybackService.Stub.asInterface(service);
// Process org.videolan.vlc.android with component org.videolan.vlc.android.AudioService
System.out.println( "---------------- track:");
// If all went well, now we can use the interface
try {
if (mService.isPlaying())
{
//String str=getTrackName();
//String str=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()+"/"+mService.getPath();
System.out.println( "Playing track: "+this.getTrackName());
Log.i("MediaPlayerServiceConnection", "Music player is playing.");
}
else
{
Log.i("MediaPlayerServiceConnection", "Music player is not playing.");
}
}
catch (Exception e) {
e.printStackTrace();
//throw new RuntimeException(e);
}
}
public void onServiceDisconnected(ComponentName name) {
Log.i("MediaPlayerServiceConnection", "Disconnected!");
}
public String getTrackName() {
try {
return ( mService.getTrackName() );
} catch (RemoteException e) {
Log.e("MediaConnection", "Failed to get TrackName");
return "Failed to get TrackName";
}
}
请帮忙 这里有两个问题:
1-无法从其他应用程序访问IMediplaybackService。这是因为自Gingerbread(Android 2.3)以来,音乐应用程序的清单文件中没有导出此服务(请参阅Android源代码中的packages/apps/Music/AndroidManifest.xml
):
当值为false
时,只有相同应用程序或具有相同用户ID的应用程序的组件才能启动服务或绑定到服务
可以重新构建音乐应用程序,将XML属性更改为true
,然后再次安装到设备上,但这将导致问题2
2.MediaPlaybackService
是内置Android音乐应用程序的一部分,仅由该应用程序内部使用。如果设备上安装了第三方音乐播放器,则不会使用MediaPlaybackService
,并且不会通过其API获得有关播放的任何信息
不幸的是,没有公共系统服务提供相同的API来访问有关当前音频曲目的信息或与当前播放进行交互
这可能是因为Android团队决定让每个音乐播放器管理关于音轨的内部信息,而不是依赖一个中央服务来跟踪正在播放的内容。这里有两个问题:
1-无法从其他应用程序访问IMediplaybackService。这是因为自Gingerbread(Android 2.3)以来,音乐应用程序的清单文件中没有导出此服务(请参阅Android源代码中的packages/apps/Music/AndroidManifest.xml
):
当值为false
时,只有相同应用程序或具有相同用户ID的应用程序的组件才能启动服务或绑定到服务
可以重新构建音乐应用程序,将XML属性更改为true
,然后再次安装到设备上,但这将导致问题2
2.MediaPlaybackService
是内置Android音乐应用程序的一部分,仅由该应用程序内部使用。如果设备上安装了第三方音乐播放器,则不会使用MediaPlaybackService
,并且不会通过其API获得有关播放的任何信息
不幸的是,没有公共系统服务提供相同的API来访问有关当前音频曲目的信息或与当前播放进行交互
这可能是因为Android团队决定让每个音乐播放器管理关于音轨的内部信息,而不是依赖一个中央服务来跟踪播放的内容。您使用的是哪一版本的Android?当你说代码不工作时,你会得到什么错误?您是否收到
SecurityException
声明不允许绑定到MediaPlaybackService
?您使用的是哪个版本的Android?当你说代码不工作时,你会得到什么错误?您是否收到SecurityException
声明不允许绑定到MediaPlaybackService
?