(一)使用SharedPreferences
SharedPreferences本身是个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例。
mode参数支持以下几个值:
- Context.MODE_PRIVATE : 指定SharedPreferences数据只能被本应用程序读写
- Context.MODE_WORLD_READABLE :能被其他应用读取,但不能写
- Context.MODE_WORLD_WRITEABLE :能被其他应用读写。
//写入过程
SharedPreferences sp = context.getSharedPreferences(“contacts”, Context.MODE_PRIVATE);
Editor mEditor = sp.edit();
mEditor.putString("name", name); //向SharedPreferences存入指定Key对应的数据,可以是boolean,float,int,String,long等各种基本类型的值
mEditor.commit();
//读取过程
SharedPreferences sp = context.getSharedPreferences(“contacts”, Context.MODE_PRIVATE);
String name2 = sp.getString("name","");
package org.crazyit.other;
import org.crazyit.other.R;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.TextView;
public class ReadOtherPreferences extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Context useCount = null;
try
{
// 获取其他程序所对应的Context
useCount = createPackageContext("org.crazyit.io",
Context.CONTEXT_IGNORE_SECURITY);
}
catch (NameNotFoundException e)
{
e.printStackTrace();
}
// 使用其他程序的Context获取对应的SharedPreferences
SharedPreferences prefs = useCount.getSharedPreferences("count",
Context.MODE_WORLD_READABLE);
// 读取数据
int count = prefs.getInt("count", 0);
}
}
(二)ContentProvider
不同应用之间需要共享数据,当然可以让一个应用程序直接去操作另一个应用程序所记录的数据,比如操作它所记录的SharedPreferences、文件、数据库等,这种方式显得太过杂乱了,不同的应用程序记录数据的方式差别很大,这种方式不利于应用程序之间进行数据交换。
Android提供了ContentProvider,它是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可通过提供ContentProvider来实现,其他应用程序就可通过ContentResolver来操作ContentProvider暴露的数据。不管该应用程序是否启动,其他应用程序都可通过该接口来操作该应用程序的内部数据,包括增加数据、删除数据、修改数据、查询数据等。
开发ContentProvider只需两步:
①开阿发一个ContentProvider子类,该子类需要实现query(),insert(),update(),delete()等方法;
②在AndroidManifest.xml文件中注册该ContentProvider,指定android:authorities属性,即该ContentProvider对应的Uri。
其他应用的ContentResolver向该Uri执行query(),insert(),update(),delete()等方法时,实际上是调用的ContentProvider的对应方法。