Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MediaPlaybackservice能否用于获取android中当前正在播放的音频文件的信息?_Android_Media Player - Fatal编程技术网

MediaPlaybackservice能否用于获取android中当前正在播放的音频文件的信息?

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

我写了一个类来处理android中的MediaPlaybackService。但代码不起作用

我绑定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";
    }           
}
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