gpt4 book ai didi

Android:如何在服务类中使用mediaController?

转载 作者:太空宇宙 更新时间:2023-11-03 11:52:27 25 4
gpt4 key购买 nike

我有一个通过 MediaPlayer 作为服务播放广播的应用程序。是否可以在服务类中使用 MediaController?问题是我可以使用 findViewById。

我尝试在 onPrepeared 方法中获取我的 LinearLayout ...

public class RadioPlayer extends Service implements OnPreparedListener, MediaController.MediaPlayerControl {
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
mediaController = new MediaController(this, false); mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
}

@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
mediaController.setMediaPlayer(this);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.main, (ViewGroup) findViewById(R.id.main_program_view));
mediaController.setAnchorView(layout);
}
}

main.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_program_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:orientation="vertical" >

<TextView
android:id="@+id/now_playing_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:gravity="center"
android:text="@string/na_antenie"
android:textColor="#333333" />
</LinearLayout>

最佳答案

您不能在您的服务中使用 mediacontroller 类。服务不包含 GUI,因此您的服务无法识别 findViewById。而是创建一个实现 mediaController 的 Activity ,然后创建您的服务并将其绑定(bind)到您的 Activity 。因此,您的服务中有 mediaPlayer, Activity 中有 Controller 。

这是 Activity 类的概述。

public class MusicPlayerActivity extends Activity implements MediaController.MediaPlayerControl{
//Do all the stuff
void initMusic(){
mMediaController = new MediaController(this,false);
//Note do not create any variable of mediaplayer
mMediaController.setMediaPlayer(this);
mMediaController.setAnchorView(findViewById(R.id.anchorText));

new Thread(new Runnable() {

@Override
public void run() {
startService(new Intent("PLAY_MUSIC"));
}
}).start();
MusicService.setPathOfSong("Provide the path");

}
}

这是服务类的概述。

public class MusicService extends Service implements MediaPlayer.OnPreparedListener {
private MediaPlayer mMediaPlayer;
private static String pathOfSong;
public int onStartCommand(Intent intent, int flags, int startId) {
mMediaPlayer=new MediaPlayer();
mMediaPlayer.setOnPreparedListener(this);
//Other stuff
}
public static void setPathOfSong(String path)
{
pathOfSong=path;
}
}

关于Android:如何在服务类中使用mediaController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001183/

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