【发布时间】:2014-03-07 12:12:42
【问题描述】:
我有一个在我的应用程序中播放音乐的服务。我正在尝试为用户在退出应用程序时是否停止音乐保存一个布尔值。当音乐播放并且他使用“退出”按钮退出应用程序时,它应该保存该值,但当他重新输入时,保存的值始终为“假”。
活动:
public class MainActivity extends Activity implements OnClickListener {
private Boolean isMusicPlaying;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
View exitButton=findViewById(R.id.exit);
exitButton.setOnClickListener(this);
isMusicPlaying=getSharedPreferences("SFX", MODE_PRIVATE).getBoolean("music", true);
if(isMusicPlaying)
startService(new Intent(getBaseContext(), MyService.class));
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.exit:
{
isMusicPlaying=getSharedPreferences("SFX", MODE_PRIVATE).getBoolean("music", true);
stopService(new Intent(getBaseContext(), MyService.class));
getSharedPreferences("SFX", MODE_PRIVATE).edit().putBoolean("music", isMusicPlaying).commit();
if(isMusicPlaying)
Toast.makeText(this, "YES", Toast.LENGTH_SHORT).show();
this.finish();
}
}
}
}
音乐服务:
public class MyService extends Service {
MediaPlayer player;
public static int lastStopped;
public static int getLastStopped() {
return lastStopped;
}
public static void setLastStopped(int lastStopped) {
MyService.lastStopped = lastStopped;
}
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.background);
player.setLooping(true);
player.setVolume(100,100);
player.seekTo(getLastStopped());
}
public int onStartCommand(Intent intent, int flags, int startId) {
getSharedPreferences("SFX", MODE_PRIVATE).edit().putBoolean("music", true).commit();
player.start();
return START_STICKY;
}
@Override
public void onDestroy() {
getSharedPreferences("SFX", MODE_PRIVATE).edit().putBoolean("music", false).commit();
setLastStopped(player.getCurrentPosition());
player.pause();
}
}
【问题讨论】:
标签: android android-activity sharedpreferences android-service