Android的:如何使用的MediaController服务类? [英] Android: How to use mediaController in service class?

查看:228
本文介绍了Android的:如何使用的MediaController服务类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我试图让我的LinearLayout在prepeared methiod ...

 公共类RadioPlayer扩展服务实现在preparedListener,MediaController.MediaPlayerControl {
  @覆盖
  公共无效的onCreate(){
  super.onCreate();
  媒体播放器=新的MediaPlayer();
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  mediaPlayer.setOn preparedListener(本);
  的MediaController =新的MediaController(这一点,假); mediaPlayer.setDataSource(URL);
  。媒体播放器prepareAsync();
}

@覆盖
  在prepared公共无效(MediaPlayer的媒体播放器){
  mediaPlayer.start();
  mediaController.setMediaPlayer(本);
  LayoutInflater充气=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
  查看布局= inflater.inflate(R.layout.main,(ViewGroup中)findViewById(R.id.main_program_view));
  mediaController.setAnchorView(布局);
}
}
 

main.xml中的文件

 < XML版本=1.0编码=UTF-8&GT?;
    < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
        机器人:ID =@ + ID / main_program_view
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT
        机器人:后台=#FFFFFF
        机器人:方向=垂直>

        <的TextView
            机器人:ID =@ + ID / now_playing_text
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_marginTop =30dp
            机器人:重力=中心
            机器人:文本=@字符串/ na_antenie
            机器人:文字颜色=#333333/>
< / LinearLayout中>
 

解决方案

您不能在服务中使用的MediaController类。服务不包含GUI所以findViewById不会被你的服务的认可。 相反,创建一个实现的MediaController然后创建你的服务并将其绑定到你的活动的活动。所以,你必须在媒体播放器你在你的活动服务和控制器。

这是活动类的概述。

 公共类MusicPlayerActivity扩展活动实现MediaController.MediaPlayerControl {
//是否所有的东东
无效initMusic(){
    mMediaController =新的MediaController(这一点,假);
    //注意不要创建媒体播放器的任何变量
    mMediaController.setMediaPlayer(本);
    mMediaController.setAnchorView(findViewById(R.id.anchorText));

    新主题(新的Runnable(){

        @覆盖
        公共无效的run(){
        startService(新的意向书(PLAY_MUSIC));
        }
    })。开始();
        MusicService.setPathOfSong(提供路径);

}
}
 

这是服务类的概述

 公共类MusicService扩展服务实现MediaPlayer.On preparedListener {
私人MediaPlayer的mMediaPlayer;
私有静态字符串pathOfSong;
公众诠释onStartCommand(意向意图,诠释标志,诠释startId){
        mMediaPlayer =新的MediaPlayer();
        mMediaPlayer.setOn preparedListener(本);
        //其他的东西
}
公共静态无效setPathOfSong(字符串路径)
{
    pathOfSong =路径;
}
}
 

I have a app that plays radio via MediaPlayer as a service. Is it possible to use MediaController in Service class? The problem is that I can use findViewById.

I try to get my LinearLayout in onPrepeared methiod ...

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 file

<?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>

解决方案

You cannot use mediacontroller class in your service. A service does not contain a GUI so findViewById is not recognized by your service. Instead create an activity which implements mediaController then create your service and bind it to your activity. So you have mediaPlayer in your service and controller in your activity.

This is an overview of activity class.

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");

}
}

This is an overview of service class.

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服务类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆