SharedPreferences 跨进程获取值

先直接上Demo代码

A 应用:存放sharedPreferences值

package com.example.putshare;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SharedPreferences sharedPreferences = getSharedPreferences("demo", Context.MODE_WORLD_READABLE | Context.MODE_PRIVATE);
		Editor editor = sharedPreferences.edit();//获取编辑器
 		editor.putString("name1", "124325");
		editor.commit();//提交修改
	}

	@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;
	 }

}

SharedPreferences 保存的值一般都保存在 这个路径:data/data/包名/shared_prefs    如果要查A应用的值有没有保持成功,可以在终端中输入:adb shell ,然后进入(cd)data/data/com.example.putshare/shared_prefs/demo.xml,之后查看(cat)demo.xml里面的值就行了。

B应用:取出sharedPreferences值

package com.example.sharedpreferences;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
	
	Button btok;
	TextView name;
	private static final String TARGET_PACKAGE_NAME = "demo";
	Context configContext = null;
	SharedPreferences share;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btok = (Button) findViewById(R.id.button);
		name = (TextView) findViewById(R.id.name);
		btok.setOnClickListener(this);
		
	}
	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		 switch (arg0.getId()) {
		 
		 case R.id.button:
			 	try { 
				   configContext = createPackageContext("com.example.putshare", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
				}catch (NameNotFoundException e) {    
			           e.printStackTrace();    
			    }  
				share = configContext.getSharedPreferences(TARGET_PACKAGE_NAME,  
					            Context.MODE_WORLD_READABLE);
				String currentChannel = share.getString("name1",""); 
				name.setText(currentChannel);//这里显示的是124325
		 break;
		 
		 }
	}

}

  其中com.example.putshare是A应用的包名。关键的部分在于标红的地方。

 1:对于跨应用使用sharedPreferences,使用模式Context.MODE_PRIVATE,这样就不能被其他程序访问到
  Activity.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Activity.MODE_APPEND  
  Activity.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取,  
  Activity.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入;  
  如果希望文件被其他应用读和写,可以传入:Activity.MODE_WORLD_READABLE+Activity.MODE_WORLD_WRITEABLE  
  Activity.MODE_APPEND:该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件

所以,这样来说在保存值的时候如果要被外界访问,一定要加上Activity.MODE_WORLD_READABLE,要是被外界改写的话一定要加上Activity.MODE_WORLD_WRITEABLE

2:这里面还有一个关键的地方,就是跨应用获取上下文环境(context),这里用到的是

configContext = createPackageContext("com.example.putshare", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
其中Context.CONTEXT_IGNORE_SECURITY这个一定要加上,这个是忽略警告,如果包名没有找到的话会抛出异常。

  总之:跨进程获取sharedPreferences值主要是这几个属性的应用,熟悉的话一切都简单多了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值