我 Build 了应用程序来播放来自互联网的音频,我使用服务在后台播放音频,问题是如何在媒体播放器准备服务(背景)中使用我的代码时显示loding对话框 .
活动
package com.uqifm.onlineradio;
.......
public class MainActivity extends AppCompatActivity {
Button b_play;
Boolean started = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b_play = (Button) findViewById(R.id.b_play);
b_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(started){
started = false;
stopService(new Intent(MainActivity.this,MyService.class));
b_play.setText("PLAY");
}else{
started = true;
startService(new Intent(MainActivity.this,MyService.class));
b_play.setText("STOP");
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
stopService(new Intent(MainActivity.this,MyService.class));
}
}
服务
package com.uqifm.onlineradio;
....................
public class MyService extends Service {
MediaPlayer mediaPlayer;
String stream = "http://xxxxx:36365";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(stream);
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mediaPlayer.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
mediaPlayer.release();
}
}
3 回答
注册广播,在启动服务之前启动
ProgressDialog
. 然后等待广播 . 广播后,隐藏对话框 . 请参阅此主题中的示例 . Send data from Service back to my activity将ProgressDialog放在xml中,并根据您的要求设置可见性 . 使用界面与服务进行通信 .
您可以使用
Broadcast
或尝试EventBus
,这样更容易 . 您可以使用EventBus
从服务发布事件,并在MainActivity
中接收广播并更新进度对话框 .Please follow the link.