SharedPreferences实现应用程序间数据共享

本文介绍如何使用SharedPreferences在不同Android应用程序间实现数据共享。重点讲解权限设置、获取其他程序Context的方法及读写SharedPreferences的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来打算把这一篇文章写在【使用SharedPreferences实现简单数据存储】之后的,但由于文章出现的问题是在不同的情况下发生和使用的,所以还是分下来下好了。

        SharedPreferences可以让不同程序之间的数据进行共享,当两个应用程序之间数据需要传递或者共享时,可以使用这个方法。本文会使用两个例子SharePreferenceWrite和SharePreferenceRead,前者为一个写SharedPreferences的程序,后者为读取前者写的SharedPreferences。

主要要点

        1、SharedPreferences权限设置,我们在getSharedPreferences方法中第二参数是用来表明我们的SharedPreferences的使用属性的,这个参数可以是下面值:

MODE_PRIVATE=0:只能是当前的应用才能操作文件如果创建的文件已经存在新内容覆盖原内容;

MODE_APPEND=32768:新内容追加到原内容后这个模式也是私有的这个文件只能被创建文件的应用所访问;

MODE_WORLD_READABLE=1:允许其他应用程序读取本应用创建的文件;

MODE_WORLD_WRITEABLE=2:允许其他应用程序写入本应用程序创建的文件,会覆盖原数据。

        所以如果我们的SharedPreferences能让外部程序读取,就必须选择MODE_WORLD_READABLE或或者MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE。

        2、我们一般在写SharedPreferences时使用getSharedPreferences方法,但需要我们注意的时,getSharedPreferences使用的是当前的Context即this,而我们需要在SharePreferenceRead程序中获取SharePreferenceWrite写的SharedPreferences时,一定要获取SharePreferenceWrite的Context,代码如下:

Java代码
  1. Context c = null;  
  2. try {  
  3.         c = this.createPackageContext("org.ourunix.android.sharepreferencewrite"this.CONTEXT_IGNORE_SECURITY);  
  4.         } catch (NameNotFoundException e) {  
  5.             // TODO Auto-generated catch block  
  6.             e.printStackTrace();  
  7.         }     

        其中参数一为我需要获取Context的程序包名,第二个参数为flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。

        3、获取SharedPreferences,需要用到上述的Context,即Context.getSharedPreferences(NAME, 0);

获取到上下文,我们就好干事情了,呵呵,干过Android的人都知道Context是个好东东,有此宝贝就可以用之来发广播、打开文件夹、数据库操作等都可以完成。

在程序中写SharePreference

        回归主题,我们先看SharePreferenceWrite的代码:

Java代码
  1. public class SharePreferenceWriteActivity extends Activity implements OnClickListener{  
  2.     private SharedPreferences prference;  
  3.     private String PREF_NAME = "PREF_NAME";  
  4.     private String KEY = "TestValue";  
  5.     private EditText mEditText;  
  6.     private Button mButton;  
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.         mEditText = (EditText) findViewById(R.id.writeTV);  
  13.         mButton = (Button) findViewById(R.id.submit);  
  14.         mButton.setOnClickListener(this);  
  15.     }  
  16.       
  17.     @Override  
  18.     public void onClick(View v) {  
  19.         // TODO Auto-generated method stub  
  20.           
  21.         prference = getSharedPreferences(PREF_NAME, MODE_WORLD_READABLE );  
  22.         prference.edit().putString(KEY, mEditText.getText().toString()).commit();  
  23.     }  
  24. }  

        运行效果图:       

SharedPreferences,数据共享

另一个程序中读SharePreference

        再看读取SharePreferenceWrite程序带的SharedPreferences的PreferenceRead程序:

Java代码
  1. public class SharePreferenceReadActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     private SharedPreferences prference;  
  4.     private String NAME = "PREF_NAME";  
  5.     private String KEY = "TestValue";  
  6.     @Override  
  7.     public void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         TextView tv = new TextView(this);  
  10.         setContentView(tv);  
  11.           
  12.         String tmp;  
  13.         Context c = null;  
  14.           
  15.         try {  
  16.             c = this.createPackageContext("org.ourunix.android.sharepreferencewrite", CONTEXT_IGNORE_SECURITY);  
  17.         } catch (NameNotFoundException e) {  
  18.             // TODO Auto-generated catch block  
  19.             e.printStackTrace();  
  20.         }     
  21.           
  22.         if (c != null)  
  23.         prference = c.getSharedPreferences(NAME, MODE_PRIVATE);  
  24.         tmp = prference.getString(KEY, "nothing");  
  25.         tv.setText(tmp);  
  26.     }  
  27. }  

        运行效果图:

SharedPreferences,数据共享

转自:http://www.ourunix.org/android/post/117.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值