数据存储 SharedPreferences 的应用之音乐播放,点击返回后再次进入该界面,仍显示上次关闭前的状态
来源:互联网 发布:端口扫描器怎么用 编辑:程序博客网 时间:2024/06/05 09:31
Activity_main.xml
只需添加一个TextView
MainActivity.java
package com.example.musicplay;import android.os.Bundle;import android.app.Activity;import android.content.Context;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 textview;private Music music;private boolean musicState=false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview=(TextView) this.findViewById(R.id.musicState);
music=new Music(this); //第二次打开时仍保持第一次关闭前的状态 SharedPreferences sharedPreferences=getSharedPreferences("PlayMusic",MODE_PRIVATE); musicState=sharedPreferences.getBoolean("musicState", false); if(musicState){ textview.setText("当前音乐状态:开");music.playMusic(); }else{textview.setText("当前音乐状态:关");} } //按键弹起事件 @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) {case KeyEvent.KEYCODE_DPAD_UP://点击箭头上的按钮textview.setText("当前音乐状态:开");musicState=true;music.playMusic();break;case KeyEvent.KEYCODE_DPAD_DOWN://点击下textview.setText("当前音乐状态:关");musicState=false;music.freeMusic();break;default:break;} return super.onKeyUp(keyCode, event); } //按键按下事件 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //退出应用程序时保存数据 if(keyCode==KeyEvent.KEYCODE_BACK){//点击返回 //第一个参数是保存的文件名,以xml形式保存 /*点击右上角DDOM,选择File Explorer,找到/data/data目录下对应的shared_prefs文件夹, * 找到PlayMusic.xml文件*/ SharedPreferences preferences=getSharedPreferences("PlayMusic",Context.MODE_PRIVATE ); //获得编辑对象 Editor editor=preferences.edit(); //添加值 editor.putBoolean("musicState",musicState);//以键值对的形式存储 //保存 editor.commit(); if(musicState){ music.freeMusic(); } finish(); } return super.onKeyDown(keyCode, event); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
Music.javapackage com.example.musicplay;import java.io.IOException;import android.content.Context;import android.media.MediaPlayer;public class Music {private MediaPlayer musicPlay=null;private Context mContext=null;public Music(Context context){mContext=context;}//播放音乐public void playMusic(){//查找音乐源musicPlay=MediaPlayer.create(mContext, R.raw.start);//使音乐循环播放musicPlay.setLooping(true);try{musicPlay.prepare();}catch(IllegalStateException ex){ex.printStackTrace();}catch(IOException e){e.printStackTrace();}musicPlay.start();}//关闭并且释放资源public void freeMusic(){if(musicPlay!=null){musicPlay.stop();musicPlay.release();}}}