Android:保存屏幕状态(初学者)

时间:2012-03-22 13:53:52

标签: android session audio media-player screens

我遇到了我的应用程序的问题,我有一个“选项”类,其中有一个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"

感谢您的帮助。

1 个答案:

答案 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)