gpt4 book ai didi

在服务中播放音频时 fragment 中的 Android MediaController

转载 作者:搜寻专家 更新时间:2023-11-01 08:44:51 25 4
gpt4 key购买 nike

我有一个 Activity,它使用 Fragments 来显示各种屏幕。其中一个屏幕用于播放音频文件。当用户选择要播放的音频文件时,我会启动一个服务并在该服务上播放音频,这样即使用户返回主屏幕,它也会继续在后台播放。

我的问题是这样的。我如何在 fragment 中使用 MediaController 来反射(reflect)服务中发生的事情,这样我就不必重新发明 MediaController 的所有控件?

我可以在 fragment 中创建 MediaController 并显示它,但是 mMediaController.setMediaPlayer(this);将 Controller 设置为我的 fragment ,对吗?如何让它设置为我的服务?

最佳答案

让您的 Service 实现 MediaPlayerControl,示例...

public class MyMusicService extends Service
implements MediaPlayerControl {

...

// Override the various `MediaPLayerControl` methods
}

现在,为了让您的 Fragment 使用 MediaPlayerControl,它必须绑定(bind)到 Service。将以下内容添加到 Service...

private final IBinder mBinder = new LocalBinder();

public class LocalBinder extends Binder {
public MyMusicService getService() {
return MyMusicService.this;
}
}

@Override
public IBinder onBind(Intent arg0) {
return mBinder;
}

现在您需要在您的 Fragment 代码中添加绑定(bind)到您的 Service 的能力 -注意,我只用一个 Activity,但对于 Fragment 的理论是一样的。将 ServiceConnection 添加到您的 Fragment 代码...

MyMusicService mService = null;
boolean mBound;

private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}

public void onServiceDisconnected(ComponentName className) {
mService = null;
mBound = false;
}
};

您可以在 onResume() 中绑定(bind)到您的 Service 并在 FragmentonPause() 中解除绑定(bind)> 并且如果您将以下内容添加到您的 Fragment 中,您可以将 MediaController 设置为 Service...

public void showMediaControllerHere() {
if (mBound){
controller.setMediaPlayer(mService);
controller.setEnabled(true);
controller.show();
}
}

关于在服务中播放音频时 fragment 中的 Android MediaController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29464010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com