1

我正在开发一个应用程序,我有一个播放和停止按钮。这些按钮工作得很好,但是当我播放音乐时,进入其他应用程序的后台,然后返回我的应用程序,如果我按下它,我的播放/停止按钮将再次开始播放。这是一个问题,因为我需要再次按下播放按钮(虽然正在播放音乐),然后按下停止按钮。有任何想法吗?我的代码是:

boolean isOn = false;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    play=(Button)findViewById(R.id.button1);

    play.setOnClickListener(new OnClickListener() {     
@Override
public void onClick(View v) {
 if(isOn) {
   stopService(new Intent(this, ServisZaStream.class));
      isOn = false;

 }else{
  startService(new Intent(this, ServisZaStream.class));
     isOn = true;
  }


    });

  }  
}
4

3 回答 3

3

您需要一种从应用程序获取后台服务当前状态的方法,并在恢复应用程序时相应地设置按钮的状态。

这是 Android 应用程序生命周期的一部分。当活动被发送到后台时,任何未保存到包中的内容都可能丢失。因此,您需要在应用程序恢复时检索您感兴趣的任何状态。

Android 以这种方式运行以节省内存和 CPU。

于 2013-07-03T13:45:46.190 回答
0

您的应用程序忘记了布尔值,因此您需要借助它不会忘记布尔值的机制来执行此操作。我通常使用单例类来执行此操作。您可以为您的应用程序找到任何方法,或者您可以也可以在单例的帮助下完成...

于 2013-07-03T13:53:01.367 回答
0

当您的应用停止或暂停时,您应该将您的 isOn 标志存储在 Bundle 中:

@Override
public void onSaveInstanceState(Bundle outState) {

    outState.putBoolean("EXTRA_IS_ON", isOn);
    super.onSaveInstanceState(outState);
}

然后在 onCreate 中检索它:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        isOn = savedInstance.getBoolean("EXTRA_IS_ON");
    }
}
于 2013-07-03T13:53:12.880 回答