android中读取其他应用数据的使用比较多,最常见的就是ContentProvider,比如联系人。如果我们只需获取很少的值,比如获取手电筒开关状态的值,那么使用SharedPreferences显得方便易用,下面例子很简单,通过一个程序点击改变手电筒开关状态值,另一个程序获取状态值。
发送端代码
package jihui.zhang;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button truebtn = (Button)findViewById(R.id.truebtn);
Button falsebtn = (Button)findViewById(R.id.falsebtn);
editor = getSharedPreferences("camera",MODE_WORLD_READABLE).edit();
truebtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
editor.putBoolean("light_on", true);
editor.commit();
}
});
falsebtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
editor.putBoolean("light_on", false);
editor.commit();
}
});
}
}
获取端代码
package jianhui.zhang;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text = (TextView)findViewById(R.id.text);
try {
Context context = createPackageContext("jihui.zhang",Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = context.getSharedPreferences("camera", Context.MODE_MULTI_PROCESS);
boolean test = pref.getBoolean("light_on", false);
text.setText("内容为" + test);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}