Android程式間通訊——多程式共用SharedPreferences
轉自:http://blog.csdn.net/yangzhaomuma/article/details/50718191
在使用SharedPreferences的時候,大家都可以看到它有幾個讀寫的標誌位,比如 PRIVATE、READABLE、WRITEABLE等。
在使用SharedPreferences進行程式資料共享時,我們發現,有些雖然過時了,但是實際上還是可以用的。
只是Google不建議大家這麼幹了。所以這篇文章只是一個介紹實現,科普。
怎麼實現呢?
先新建兩個android工程,分別命名為:ShareprefenceShareA(後文稱為A)、ShareprefenceShareB(後文稱為B)。
我們想要實現的目標是,在A中寫入到Shareprefence中的內容,在B中可以讀到。
先貼出A中程式碼:
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的程式碼:
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):
SharedPreferences.Editor editor=context.getSharedPreferences(settingString, Context.MODE_WORLD_READABLE).edit();
B的主程式程式碼如下:
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的程式碼如下:
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中,否則是取不到資料的。
相關文章
- Android 多程式通訊Android
- Android 程式之間通訊Android
- Android程式間通訊詳解Android
- Android程式間通訊,AIDL工作原理AndroidAI
- Android程式間通訊(複習筆記)Android筆記
- Android 元件化之通訊(多模組,多程式)Android元件化
- Android跨程式通訊Android
- PHP程式間通訊PHP
- 程式間通訊——LINUXLinux
- 程式間通訊(Socket)
- 程式間的通訊
- Linux程式間通訊Linux
- Android多程式通訊之幾個基本問題Android
- Android 多程式通訊之幾個基本問題Android
- Node.js - 阿里Egg的多程式模型和程式間通訊Node.js阿里模型
- [Android]程式通訊Andromeda框架Android框架
- 什麼是程式間通訊?Linux程式間通訊有幾種方式?Linux
- 程式間通訊是什麼?Linux程式間通訊有幾種方式?Linux
- IPC-程式間通訊
- 程式間通訊簡介
- Linux程式間通訊-eventfdLinux
- 小程式頁面間通訊——EventChannel(資料量多時)
- 程式間通訊--訊息佇列佇列
- linux 程式間通訊之管道Linux
- 程式間通訊的場景
- Linux 的程式間通訊:管道Linux
- linux 程式間通訊之FIFOLinux
- 實驗八 程式間通訊
- 程式間通訊方式有哪些?
- Linux程式之間如何通訊?Linux
- 程式間通訊如何加鎖
- 多程式通訊系列問題
- 通過 App Groups 實現程式間通訊APP
- linux程式間通訊(IPC)小結Linux
- Electron實戰之程式間通訊
- Linux程式間通訊②:有名管道FIFOLinux
- 微服務的程式間通訊(IPC)微服務
- 程式間的幾種通訊方式
- linux程式間通訊--管道(PIPE & FIFO)Linux