我的应用程序遇到了一个问题,我有一个“option”类,其中包含一个ToggleButton,用于处理在 session 中创建的音乐播放(打开或关闭)。但是,如果我关闭音乐,切换屏幕并返回到选项类,则即使音乐不再播放,ToggleButton也会返回“打开”,这意味着我必须按两次按钮才能将音乐真的回来了。有人有什么想法吗?
服务等级:
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;
}
}
选项类别:
公共(public)类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();
}
}});
}
}
主要 Activity 类
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"
谢谢你的帮助。
最佳答案
是的,当您返回此 View 时,ToggleButton
将重新初始化,因此android:checked="true"
重新开始起作用。
您可以使用myToggleButton.setChecked(boolean isMusicPlaying)
方法来重置Button的状态。
因此,当您返回此 View 并相应设置按钮的状态时,必须检查音乐是否正在播放。
您可以使用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)
关于android - Android:保存屏幕状态(初学者),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9823677/