`
quanminchaoren
  • 浏览: 926897 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android Shared Preferences

阅读更多

Shared Preferences类似于我们常用的ini 文件,用来保存应用程序的一些属性设置,在 Android平台常用于存储比较简单的参数设置。例如,可以通过它保存上一次用户所做的修改或者自定义参数设定,当再次启动程序后依然保持原有的设置。 通过 getPreferences()方法来获得Preferences对象,通过 "SharedPreferences.Editor editor = uiState.edit();" 取得编辑对象,然后通过"edit.put....()"方法添加数据,最后通过commit()方法保存这些数据,如果不需要与其它模块共享数据,可以 使用Activity.getPreferences()方法保持数据私有。需要着重强调一点是,我们无法直接在多个程序间共享Preferences 数据。 下面我们通过一个例子来保存应用程序当前是否 播放音效的状态。当前音效状态处于关闭时,我们按“上”方向键来开启音效,然后退出程序------>点击back按钮 ,当我们再次启动应用程序,现在的音效状态就处于开的状态。 在这个程序中我们在退出时把音效状态保存到 Preferences 中,因此在启动时就读取出上次保存的数据。 我们上次保存的是什么状态 ,在打开的时候就是什么状态。 但是大家得点击back按钮退出时才会保存,因为 我们的 保存操作是放在 back按钮的监听事件里边完成的。 来看看运行时的图片。





Activity01

Java代码
  1. package  xiaohang.zhimeng;  
  2.   
  3. import  android.app.Activity;  
  4. import  android.content.SharedPreferences;  
  5. import  android.os.Bundle;  
  6. import  android.view.KeyEvent;  
  7. import  android.widget.TextView;  
  8.   
  9. public   class  Activity01  extends  Activity {  
  10.   
  11.     private  MIDIPlayer  mMIDPlayer =  null ;  
  12.     private   boolean      mbMusic    =  false ;  
  13.     private  TextView    mTextView  =  null ;  
  14.           
  15.     @Override   
  16.     public   void  onCreate(Bundle savedInstanceState){  
  17.         super .onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.               
  20.         mTextView = (TextView) this .findViewById(R.id.TextView01);  
  21.           
  22.         mMIDPlayer = new  MIDIPlayer( this );  
  23.           
  24.         /*装载资源*/   
  25.         //取得活动的preferences对象.   
  26.       //getPreferences方法返回单一的SharedPreferences实例    
  27.       //getPreferences参数 为操作模式 分别有    
  28.       //MODE_PRIVATE私有int值为0   MODE_WORLD_READABLE可读int值为1  MODE_WORLD_WRITEABLE可写int值为2   
  29.         SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);  
  30.           
  31.         //取得值 如果mbMusic的值不存在 则直接把false赋给它   
  32.         mbMusic = settings.getBoolean("bmusic" false );  
  33.           
  34.         if  (mbMusic) {  
  35.             mTextView.setText("当音乐状态:开" );  
  36.             mbMusic = true ;  
  37.             mMIDPlayer.PlayMusic();  
  38.         }else  {  
  39.             mTextView.setText("当前音乐状态:关" );  
  40.         }  
  41.     }  
  42.       
  43.     public   boolean  onKeyUp( int  keyCode, KeyEvent event){  
  44.         switch  (keyCode) {  
  45.         case  KeyEvent.KEYCODE_DPAD_UP:  
  46.             mTextView.setText("当前音乐状态:开" );  
  47.             mbMusic = true ;  
  48.             mMIDPlayer.PlayMusic();  
  49.             break ;  
  50.         case  KeyEvent.KEYCODE_DPAD_DOWN:  
  51.             mTextView.setText("当前音乐状态:关" );  
  52.             mbMusic = false ;  
  53.             mMIDPlayer.FreeMusic();  
  54.             break ;  
  55.         }  
  56.         return   true ;  
  57.     }  
  58.       
  59.     public   boolean  onKeyDown( int  keyCode, KeyEvent event){  
  60.         if  (keyCode == KeyEvent.KEYCODE_BACK) {  
  61.             /*这里我们在退出应用程序时保存数据*/   
  62.             //取得活动的preferences对象   
  63.             SharedPreferences uiState = getPreferences(0 );  
  64.               
  65.             //取得编辑对象   
  66.             SharedPreferences.Editor editor = uiState.edit();  
  67.               
  68.             //添加值   
  69.             editor.putBoolean("bmusic" , mbMusic);  
  70.               
  71.             //提交保存  NOTE:如果不commit 保存无效   
  72.             editor.commit();  
  73.             if  ( mbMusic ) {  
  74.                 mMIDPlayer.FreeMusic();  
  75.             }  
  76.             this .finish();  
  77.             return   true ;  
  78.         }  
  79.         return   super .onKeyDown(keyCode, event);  
  80.     }  
  81. }  
package xiaohang.zhimeng;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;

public class Activity01 extends Activity {

	private MIDIPlayer	mMIDPlayer = null;
	private boolean 	mbMusic	   = false;
	private TextView	mTextView  = null;
	    
	@Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
            
        mTextView = (TextView) this.findViewById(R.id.TextView01);
        
        mMIDPlayer = new MIDIPlayer(this);
        
        /*装载资源*/
        //取得活动的preferences对象.
      //getPreferences方法返回单一的SharedPreferences实例 
      //getPreferences参数 为操作模式 分别有 
      //MODE_PRIVATE私有int值为0   MODE_WORLD_READABLE可读int值为1  MODE_WORLD_WRITEABLE可写int值为2
        SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
        
        //取得值 如果mbMusic的值不存在 则直接把false赋给它
        mbMusic = settings.getBoolean("bmusic", false);
        
        if (mbMusic) {
			mTextView.setText("当音乐状态:开");
			mbMusic = true;
			mMIDPlayer.PlayMusic();
		}else {
			mTextView.setText("当前音乐状态:关");
		}
    }
	
	public boolean onKeyUp(int keyCode, KeyEvent event){
		switch (keyCode) {
		case KeyEvent.KEYCODE_DPAD_UP:
			mTextView.setText("当前音乐状态:开");
			mbMusic = true;
			mMIDPlayer.PlayMusic();
			break;
		case KeyEvent.KEYCODE_DPAD_DOWN:
			mTextView.setText("当前音乐状态:关");
			mbMusic = false;
			mMIDPlayer.FreeMusic();
			break;
		}
		return true;
	}
	
	public boolean onKeyDown(int keyCode, KeyEvent event){
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			/*这里我们在退出应用程序时保存数据*/
			//取得活动的preferences对象
			SharedPreferences uiState = getPreferences(0);
			
			//取得编辑对象
			SharedPreferences.Editor editor = uiState.edit();
			
			//添加值
			editor.putBoolean("bmusic", mbMusic);
			
			//提交保存  NOTE:如果不commit 保存无效
			editor.commit();
			if ( mbMusic ) {
				mMIDPlayer.FreeMusic();
			}
			this.finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}



MIDIPlayer类主要用来开启和关闭音乐服务

Java代码
  1. package  xiaohang.zhimeng;  
  2.   
  3. import  java.io.IOException;  
  4.   
  5. import  android.content.Context;  
  6. import  android.media.MediaPlayer;  
  7.   
  8. public   class  MIDIPlayer {  
  9.     public   MediaPlayer playerMusic =  null ;  
  10.     private  Context     mContext    =  null ;  
  11.       
  12.     public  MIDIPlayer(Context context){  
  13.         mContext = context;  
  14.     }  
  15.       
  16.     //播放音乐   
  17.     public   void  PlayMusic(){  
  18.         //装载资源文件中的音乐   
  19.         playerMusic = MediaPlayer.create(mContext, R.raw.start);  
  20.           
  21.         //设置是否循环   
  22.         playerMusic.setLooping(true );  
  23.         try  {  
  24.             playerMusic.prepare();  
  25.         } catch  (IllegalStateException e) {  
  26.             e.printStackTrace();  
  27.         }catch  (IOException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         playerMusic.start();  
  31.     }  
  32.       
  33.     //停止播放音乐   
  34.     public   void  FreeMusic(){  
  35.         if  (playerMusic !=  null ) {  
  36.             playerMusic.stop();  
  37.             playerMusic.release();  
  38.         }  
  39.     }  
  40. }  
package xiaohang.zhimeng;

import java.io.IOException;

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


  
    现在我们已经实现通过Preferences 来存取数据了,那么这些数据到底放在了哪里?其实没安装一个应用程序时,在/data/data 目录下都会产生一个文件夹,如果应用程序使用了Preferences, 那么便会在该文件夹下产生一个shared_prefs 文件夹,其中就是我们保存的数据。查看步骤:
   1.  启动模拟器,启动Eclipse
   2. 在Eclipse中切换到DDMS ,选择File Explorer标签
   3. 找到/data/data 目录中用Preferences 来存取的数据存在Activity01.xml文件中。 还是来张图 比较爽


  
  不过到这里又稍微纠结了一下 似乎在DDMS下还不能查看 保存我们Preferences值的那个文件Activity01.xml 的内容  那我们就去 shell 里边查吧。

分享到:
评论

相关推荐

    Android代码-一个快速方便地访问Android Shared preferences 库。

    FastSave is An Android library for fast and easy access to Android Shared preferences. It allows you to save any type or list in the sharedpreferences and retrieve it in convenient way. Installation ...

    Android 使用Shared Preferences进行数据存储-样例.rar

    Android 使用Shared Preferences进行数据存储-样例,演示如何使用 Shared Preferences 获得数据和保存数据、如何使用getPreferences方法创建文件的模式,以及如何使用getPreferences模拟用户参数设置、查看 ...

    利用Shared Preferences,在2个不同的Activity传递数据

    在Android应用开发中,数据的持久...总之,通过 Shared Preferences,Android 开发者可以在多个 Activity 之间轻松传递数据,尤其适用于保存用户登录状态等简单信息。合理使用这一工具,可以使代码更加简洁且易于维护。

    Android代码-shared-preferences-helper

    Android Shared Preferences Helper Android Library to handle SharedPreferences boilerplate code and other tools Download dependencies { compile 'com.github.seanzor:shared-preferences-helper:1.1.0' }...

    shared-preferences for flutter

    Shared Preferences是Android平台上的一个轻量级的数据存储类,用于保存和读取应用程序的一些常用配置和数据,比如用户设置的参数、游戏分数、应用程序状态等。Shared Preferences类似于Windows中的INI文件,它允许...

    Android SharedPreferencese 用法 代码 实例

    在Android应用开发中,Shared Preferences 是一种轻量级的数据存储方式,主要用于存储应用程序中的轻量级数据,如用户设置、简单配置等。它提供了一种键值对的形式来保存数据,且这些数据会持久化存储在设备上,即使...

    android 数据存储之 Shared Preferences

    android:authorities="your.package.name_preferences" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider"> android:name="android.support....

    Android代码-Multiplatform-Preferences

    Use a single object : Preferences in your kotlin shared projects Compatible with kotlin android and kotlin native for iphone class MyPresenter { val preferences = Preferences() fun start(){ ...

    Android数据存储(Shared设置)

    共享首选项(Shared Preferences)是Android提供的一种轻量级的数据存储方式,适用于保存少量的键值对数据,如用户设置、简单的配置信息等。在本文中,我们将深入探讨如何在Android中使用Shared Preferences进行数据...

    数据存储之shared preferences

    在Android开发中,数据存储是应用生命周期管理的重要组成部分。`SharedPreferences`是Android提供的一种轻量级的数据存储方式,常用于存储应用的配置信息或者简单的用户数据。本篇将深入探讨`SharedPreferences`的...

    Android源码——sharedPref学习源码.zip

    在Android开发中,Shared Preferences是应用中保存轻量级数据的一种常见方式,它主要用于存储一些简单的键值对数据,如用户设置、应用状态等。在深入理解`sharedPref`的学习源码之前,我们先来回顾一下 Shared ...

    android 数据存取Preferences

    ### Android 数据存取之 Preferences #### 一、概述 在Android开发中,应用程序往往需要存储用户的个性化设置,例如字体大小、背景颜色或是地理位置等信息。为了实现这一需求,Android提供了多种数据存储方式,...

    Android代码-SharedPrefManager

    SharedPref Manager helps to manage your android Shared Preferences very effectively with ease (currently under active development, expect to see new releases almost daily) Features Edit a ...

    protoncore_android:适用于Android的Proton Core组件

    其中反映以下列出的小写字母,用-代替空格Util Android Shared Preferences: **0.1**可以解析为me.proton.core:util-android-share-preferences:0.1 如果存在所有或某些domain , data , presentation ,则可以将...

    Sharedpreferences存储数据的使用方法_完整Demo_AndroidStudio

    Shared Preferences是Android提供的一种轻量级的数据存储机制,常用于保存应用程序中的配置设置或简单的键值对数据。它以XML格式存储,适合保存少量非结构化的数据。在这个"Sharedpreferences存储数据的使用方法_...

    安卓Android源码——sharedPref.rar

    在安卓(Android)平台上,Shared Preferences 是一种轻量级的数据存储机制,用于保存应用程序中的简单键值对数据,如偏好设置或用户配置。这个压缩包文件 "sharedPref.rar" 可能包含了一些示例代码或者解析,以帮助...

    安卓Android源码——sharedPref1.rar

    在安卓(Android)平台上,Shared Preferences 是一种轻量级的数据存储机制,用于保存应用程序中的简单键值对数据,如设置、用户偏好等。这个“安卓Android源码——sharedPref1.rar”压缩包文件可能包含了关于如何在...

    Android代码-secure-preferences

    This is Android Shared preference wrapper that encrypts the values of Shared Preferences using AES 128, CBC, and PKCS5 padding with integrity checking in the form of a SHA 256 hash. Each key is stored...

    Android中使用SharedPeferences存储

    Shared Preferences是Android系统提供的一种轻量级的数据存储方式,主要用于存储一些简单的键值对数据,如用户偏好设置、应用配置等。这种方式非常适合保存少量非敏感数据,并且易于读写。下面我们将深入探讨如何在...

    Android sharedPref学习源码.zip

    在Android开发中,Shared Preferences是保存轻量级数据的一个重要工具。它主要用于存储用户的一些配置信息或者简单数据,比如登录状态、应用主题设置等。在本压缩包“Android sharedPref学习源码.zip”中,我们可以...

Global site tag (gtag.js) - Google Analytics