背景音乐和共享偏好

时间:2014-07-18 12:56:35

标签: java android sharedpreferences android-mediaplayer

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

我的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();
}

}

提前致谢。

1 个答案:

答案 0 :(得分:0)

现在您只是在“设置”活动中播放音乐。实际上,您在mp.stop()中呼叫onStop()。这就是它关闭音乐停止的原因。

您还应将代码放在MainActivity onCreate()onResume()中,以便从共享偏好中读取内容,如果背景音乐为真,则播放音乐。这可能看起来像这样:

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();
}

请注意,您现在要使用SharedPreferences代替SettingsgetApplicationContext()中写信this。这样,首选项将保存在整个应用程序中,而不仅仅是一个活动。