首页 > 代码库 > 学习Android之SharedPreferences使用

学习Android之SharedPreferences使用

效果图例如以下:



当我们想让自己的属性设置保存下来,这时就须要SharedPreferences。

上面这个小程序,音乐状态是保存下来的。使用的上一次退出的状态。

进入DDMS,data文件下的data文件里,找到自己的包名文件,双击打开,有shared_prefs文件,里面有xml文件,这就是配置文件。

本程序使用了android的上下键,同常我们的模拟器的方向键是不能用的,这是就须要我们打开它,在C盘下找到文件 .android,双击avd文件,找到你的模拟器的目录,双击打开,找到config.ini,打开,改动armhw.dPad=yes,启动模拟器,这时就能用了。


本程序建立了MainActivity.java、MIDIPlayer.java、activity_main.xml。


程序代码例如以下:

MainActivity.java


package com.example.l3_sharedpreferences;

import com.example.l3_sharedpreferences.model.MIDIPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.KeyEvent;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView musicStateShow;
	private MIDIPlayer midiPlayer;
	private boolean musicSate=false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		musicStateShow=(TextView) this.findViewById(R.id.musicStateShow);
		midiPlayer=new MIDIPlayer(this);
		
		SharedPreferences sharedPreferences=getSharedPreferences("music",MODE_PRIVATE);
		musicSate=sharedPreferences.getBoolean("mState", false);
		if(musicSate){
			musicStateShow.setText("当前音乐状态:开");
			midiPlayer.playMusic();		
		}else{
			musicStateShow.setText("当前音乐状态:关");
		}
		
		
	}
	
	
	
	/**
	 * 按键弹起事件
	 */
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		System.out.println("keyCode="+keyCode);
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			musicStateShow.setText("当前音乐状态:开");
			musicSate=true;
			midiPlayer.playMusic();
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			musicStateShow.setText("当前音乐状态:关");
			musicSate=false;
			midiPlayer.freeMusic();
			break;
		default:
			break;
		}
		return super.onKeyUp(keyCode, event);
	}
	
	/**
	 * 按键按下事件
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		//退出应用程序时保存数据
		if(keyCode==KeyEvent.KEYCODE_BACK){
			SharedPreferences sharedPreferences=getSharedPreferences("music", MODE_PRIVATE);
			Editor editor=sharedPreferences.edit();  //取得编辑对象
			editor.putBoolean("mState", musicSate);   //加入?数据
			editor.commit();     //保存
			if(musicSate){
				midiPlayer.freeMusic();
			}
			finish();
		}
		return super.onKeyDown(keyCode, event);
	}

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

}

MIDIPlayer.java

package com.example.l3_sharedpreferences.model;

import java.io.IOException;
import com.example.l3_sharedpreferences.R;
import android.content.Context;
import android.media.MediaPlayer;

public class MIDIPlayer {
	public MediaPlayer playerMusic = null;
	private Context mContext = null;

	public MIDIPlayer(Context context) {
		mContext = context;
	}

	/* 播放音乐 */
	public void playMusic() {
		/* 装载资源中的音乐 */
		playerMusic = MediaPlayer.create(mContext, R.raw.start);

		/* 设置是否循环 */
		playerMusic.setLooping(true);
		try {
			playerMusic.prepare();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		playerMusic.start();
	}

	/* 停止并释放音乐 */
	public void freeMusic() {
		if (playerMusic != null) {
			playerMusic.stop();
			playerMusic.release();
		}
	}
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/musicStateShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/currentMusic"/>

</RelativeLayout>