我遇到了我的应用程序的问题,我有一个“选项”类,其中有一个ToggleButton,用于处理我在Session中创建的音乐(开或关)的播放。但是,如果我关闭音乐,更改屏幕并返回选项类,ToggleButton将返回“on”,即使音乐不再播放,这意味着我必须按两次按钮才能播放音乐实际上回来了。有没有人有任何想法?
服务类:
public class MyMusicService extends Service {
MediaPlayer mp;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mp = MediaPlayer.create(this, R.raw.song);
mp.start();
mp.setLooping(true);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(mp!=null) {
mp.stop();
mp.release();
}
mp=null;
}
}
选项类:
公共类OptionsActivity扩展了Activity {
Intent i; // Handles MyMusicService.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.options);
//setting the layout
i=new Intent(this, MyMusicService.class);
final ToggleButton soundOption = (ToggleButton) findViewById(R.id.soundPref);
soundOption.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on clicks to control sound being on and off.
if (soundOption.isChecked()) {
Toast.makeText(OptionsActivity.this, "Music on.", Toast.LENGTH_SHORT).show();
startService(i);
} else {
stopService(i);
Toast.makeText(OptionsActivity.this, "Music off.", Toast.LENGTH_SHORT).show();
}
}});
}
}
MainActvitiy类
Intent i;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//setting the layout
//Auto starts playing music on app launch.
i = new Intent(this,MyMusicService.class);
startService(i);
这可能与我所拥有的XML事实有关:
android:checked="true"
感谢您的帮助。
答案 0 :(得分:0)
是的,当您回到此视图时,ToggleButton
将重新初始化,因此android:checked="true"
重新开始播放。
您可以使用方法myToggleButton.setChecked(boolean isMusicPlaying)
重置Button的状态。
因此,当您返回此视图并相应地设置按钮的状态时,您必须检查音乐是否正在播放。
您可以使用method as described in another thread查看您的音乐服务是否正在运行。
private boolean isMyServiceRunning(String serviceCanonicalClassName) {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceCanonicalClassName.equals(service.service.getClassName())) {
return true;
}
}
return false;
}
因此您只需将其调用即可查找正在运行的服务。 然后,在找到ToggleButton在布局中的位置后,您可以定义是否应切换它:
boolean musicPlays = isMyServiceRunning(MyMusicService.class.getCanonicalName());
final ToggleButton soundOption = (ToggleButton) findViewById(R.id.soundPref);
soundOption.setChecked(musicPlays)