效果图例如以下:
当我们想让自己的属性设置保存下来,这时就须要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; } }
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(); } } }
<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>