Android进程间通讯——多进程共用SharedPreferences
2016-07-21 19:18
465 查看
Android进程间通讯——多进程共用SharedPreferences
2016-07-21 19:18600人阅读 评论(0)
收藏
举报
本文章已收录于:
分类:
android数据共享(3)
作者同类文章X
转自:http://blog.csdn.net/yangzhaomuma/article/details/50718191
在使用SharedPreferences的时候,大家都可以看到它有几个读写的标志位,比如 PRIVATE、READABLE、WRITEABLE等。
在使用SharedPreferences进行进程数据共享时,我们发现,有些虽然过时了,但是实际上还是可以用的。
只是Google不建议大家这么干了。所以这篇文章只是一个介绍实现,科普。
怎么实现呢?
先新建两个Android工程,分别命名为:ShareprefenceShareA(后文称为A)、ShareprefenceShareB(后文称为B)。
我们想要实现的目标是,在A中写入到Shareprefence中的内容,在B中可以读到。
先贴出A中代码:
[html]
view plain
copy
print?
package com.example.shareprefencesharea;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn,btn1;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.btn);
btn1=(Button)findViewById(R.id.btn1);
editText=(EditText)findViewById(R.id.text);
final SharedPrefencesImp imp=new SharedPrefencesImp(MainActivity.this);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
imp.SetSharedPrefences("info", editText.getText().toString());
}
});
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String result= imp.GetSharedPrefences("info");
Toast.makeText(getApplicationContext(), result, 0).show();
}
});
}
}
package com.example.shareprefencesharea; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { Button btn,btn1; EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.btn); btn1=(Button)findViewById(R.id.btn1); editText=(EditText)findViewById(R.id.text); final SharedPrefencesImp imp=new SharedPrefencesImp(MainActivity.this); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub imp.SetSharedPrefences("info", editText.getText().toString()); } }); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String result= imp.GetSharedPrefences("info"); Toast.makeText(getApplicationContext(), result, 0).show(); } }); } }以上代码做的是set、get操作。
以下是SharedPrefencesImp的代码:
[html]
view plain
copy
print?
package com.example.shareprefencesharea;
import android.content.Context;
import android.content.SharedPreferences;
public class SharedPrefencesImp {
private Context context;
private String settingString="SharedPrefencesXml";
public SharedPrefencesImp(Context context)
{
this.context=context;
}
/**
* 设置sharedprefences
* @param keyname
* @param keyvalue
*/
public void SetSharedPrefences(String keyname,String keyvalue)
{
//SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();写法也可以如此,默认名称为包名
SharedPreferences.Editor editor=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE).edit();
editor.putString(keyname, keyvalue);
editor.commit();
}
/**
* 获取sharedprefences中key为keyname的值
* @param keyname
* @return
*/
public String GetSharedPrefences(String keyname)
{
SharedPreferences sharedPreferences=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE);
String resultString= sharedPreferences.getString(keyname, "");
return resultString;
}
}
package com.example.shareprefencesharea; import android.content.Context; import android.content.SharedPreferences; public class SharedPrefencesImp { private Context context; private String settingString="SharedPrefencesXml"; public SharedPrefencesImp(Context context) { this.context=context; } /** * 设置sharedprefences * @param keyname * @param keyvalue */ public void SetSharedPrefences(String keyname,String keyvalue) { //SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();写法也可以如此,默认名称为包名 SharedPreferences.Editor editor=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE).edit(); editor.putString(keyname, keyvalue); editor.commit(); } /** * 获取sharedprefences中key为keyname的值 * @param keyname * @return */ public String GetSharedPrefences(String keyname) { SharedPreferences sharedPreferences=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE); String resultString= sharedPreferences.getString(keyname, ""); return resultString; } }
与传统的本进程中使用的shareprefence不同的地方在于,我们使用了MODE_WORLD_READABLE(传统本进程使用,一般使用MODE_PRIVATE):
[html]
view plain
copy
print?
SharedPreferences.Editor editor=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE).edit();
SharedPreferences.Editor editor=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE).edit();
那么在另一个app中(B),该如何调用A中设置到shareprefence中的数据呢?
B的主程序代码如下:
[html]
view plain
copy
print?
package com.example.shareprefenceshareb;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn,btn1;
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button)findViewById(R.id.btn);
btn1=(Button)findViewById(R.id.btn1);
editText=(EditText)findViewById(R.id.text);
Context c=null;
try {
//com.example.shareprefencesharea 是A的包名
//Context.CONTEXT_IGNORE_SECURITY 忽略安全检查标志
c = createPackageContext("com.example.shareprefencesharea", Context.CONTEXT_IGNORE_SECURITY);
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
final SharedPrefencesImp imp=new SharedPrefencesImp(c);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String result= imp.GetSharedPrefences("info");
Toast.makeText(MainActivity.this, result, 0).show();
}
});
}
}
package com.example.shareprefenceshareb; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { Button btn,btn1; EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.btn); btn1=(Button)findViewById(R.id.btn1); editText=(EditText)findViewById(R.id.text); Context c=null; try { //com.example.shareprefencesharea 是A的包名 //Context.CONTEXT_IGNORE_SECURITY 忽略安全检查标志 c = createPackageContext("com.example.shareprefencesharea", Context.CONTEXT_IGNORE_SECURITY); } catch (SecurityException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } final SharedPrefencesImp imp=new SharedPrefencesImp(c); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String result= imp.GetSharedPrefences("info"); Toast.makeText(MainActivity.this, result, 0).show(); } }); } }重点在做了注释的这一行。
SharePrefencesImp的代码如下:
[html]
view plain
copy
print?
package com.example.shareprefenceshareb;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
public class SharedPrefencesImp {
private Context context;
private String settingString="SharedPrefencesXml";
public SharedPrefencesImp(Context context)
{
this.context=context;
}
/**
* 获取sharedprefences中key为keyname的值
* @param keyname
* @return
*/
public String GetSharedPrefences(String keyname)
{
SharedPreferences sharedPreferences=context.getSharedPreferences(settingString, context.MODE_PRIVATE);
String resultString= sharedPreferences.getString(keyname, "");
return resultString;
}
}
package com.example.shareprefenceshareb; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager.NameNotFoundException; public class SharedPrefencesImp { private Context context; private String settingString="SharedPrefencesXml"; public SharedPrefencesImp(Context context) { this.context=context; } /** * 获取sharedprefences中key为keyname的值 * @param keyname * @return */ public String GetSharedPrefences(String keyname) { SharedPreferences sharedPreferences=context.getSharedPreferences(settingString, context.MODE_PRIVATE); String resultString= sharedPreferences.getString(keyname, ""); return resultString; } }
综上,我们可以看到,进程间共用shareprefence是可以实现的。只是有个特别的地方,需要把第一个app的包名对应的context传入到第二个app中,否则是取不到数据的。
源码:多进程共用shareprefence
顶 0 踩 0
上一篇Android权限之sharedUserId和签名 .
下一篇Android 获取全局Context的技巧
我的同类文章
android数据共享(3)http://blog.csdn.net
•Android权限之sharedUserId和签名 .2016-07-21阅读291
•Android 不同应用通过SharedPreference实现共享数据2016-07-21阅读91
•Android-sharedUserId数据权限2016-07-21阅读84
相关文章推荐
- Android使用SharedPreferences存储XML文件的实现方法
- Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
- Android使用SharedPreferences存储数据的实现方法
- Android持久化技术之SharedPreferences存储实例详解
- Android通过"记住密码"功能学习数据存储类SharedPreferences详解及实例
- Android应用中使用SharedPreferences类存储数据的方法
- android中使用SharedPreferences进行数据存储的操作方法
- SharedPreferences详解
- Android SharedPreferences
- Activity之SharedPreferences探究
- 【Android】数据共享 sharedPreferences 相关注意事项
- Android SharedPreferences理解
- Android SharedPreferences 源码分析
- andriod之SharedPreferences共享参数存储
- Android数据存储——SharedPreferences(记录应用被打开的次数)
- SharedPreferences实现Android中的数据存储
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
- 使用SharedPreferences来实现记住密码和自动登陆
- Android数据存储初识
- 安卓数据存储困惑