2014-07-18 33 views
1

我想要使用设置开启和关闭背景音乐,这是一项活动,可以通过按主菜单中的菜单按钮并选择设置来启动。我现在面临的问题是,当我点击背景音乐复选框时,点击保存并返回到主要活动时,我的音乐停止播放。如何确保音乐在返回主要活动后继续播放?当我停止应用程序并重新启动活动时,我希望设置保持它们被选中的方式(使用sharedpreferences)。任何人都可以看看我的代码,看看我做错了什么?背景音乐和共享偏好

我MainActivity.java

package sp.com; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.widget.Button; 
import android.widget.TextView; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.RadioGroup; 
import android.widget.Toast; 
import java.util.ArrayList; 
import java.util.List; 
import android.app.TabActivity; 
import android.widget.TabHost; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.content.Context; 
import android.database.Cursor; 
import android.support.v4.widget.CursorAdapter; 
import android.media.MediaPlayer; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.view.KeyEvent; 

public class MainActivity extends Activity { 

    Button button; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 

    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.setting: 
      Intent intent = new Intent(MainActivity.this, Settings.class); 
      startActivity(intent); 

      break; 

     } 
     return super.onOptionsItemSelected(item); 
    } 


} 

我settings.java

package sp.com; 

import android.app.Activity; 
import android.content.SharedPreferences; 
import android.view.View.OnClickListener; 

import android.content.SharedPreferences.Editor; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceManager; 
import android.view.KeyEvent; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.CheckBox; 

public class Settings extends Activity implements OnClickListener { 
    CheckBox Backmusic; 
    Button button1; 
    private MediaPlayer mp; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.xml.preferences); 
     Backmusic = (CheckBox) findViewById(R.id.backmusic); 
     button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
     loadSavedPreferences(); 
    } 
    private void loadSavedPreferences(){ 
    SharedPreferences sharedPreferences = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    boolean checkBoxValue = sharedPreferences.getBoolean("CheckBox_Value",false); 
    if (checkBoxValue){ 
     Backmusic.setChecked(true); 
    } else { 
     Backmusic.setChecked(false); 
    } 
} 

private void savePreferences(String key, boolean value){ 
    SharedPreferences sharedPreferences = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    Editor editor = sharedPreferences.edit(); 
    editor.putBoolean(key, value); 
    editor.commit(); 
} 

@Override 
public void onClick(View v){ 
    savePreferences("CheckBox_Value",Backmusic.isChecked()); 
    if (Backmusic.isChecked()){ 
     mp = MediaPlayer.create(getBaseContext(), R.raw.sound); 
     mp.start(); 
    } else { 

     mp.stop(); 
     finish(); 
    } 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
    mp.stop(); 
    finish(); 
} 

} 

在此先感谢。

回答

0

所以现在你只是在设置活动中播放音乐。实际上,您在onStop()中致电mp.stop()。这就是为什么当它关闭音乐停止。

您还应该将MainActivity中的代码放在onCreate()onResume()中以便从sharedpreferences中读取,并且如果背景音乐为true,则播放音乐。这可能是这个样子:

SharedPreferences sp = PreferenceManager 
    .getDefaultSharedPreferences(getApplicationContext()); 
boolean backgroundMusic = sp.getBoolean("CheckBox_Value",false); 
if (backgroundMusic) 
{ 
    MediaPlayer mp = MediaPlayer.create(getBaseContext(), R.raw.sound); 
    mp.start(); 
} 
else 
{ 
    mp.stop(); 
} 

请注意,您现在会想使用的getApplicationContext()代替thisSharedPreferencesSettings。这样,偏好将保存在整个应用程序中,而不仅仅是一项活动。

+0

嗨,你能详细说明我应该把代码放在主要活动的位置吗?我很困惑我是否应该把它放在onCreate或onresume – user3599230

+0

把它放在两个。这样,当你打开应用程序时,它会记住你上一次的设置,当你从'Settings'返回到'MainActivity'时,它会反映出新的设置。 – Akshay

+0

查看活动生命周期文档,了解更多信息:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle – Akshay