一个应用访问另一个应用的数据。前提是被访问应用的数据必须是全局可见的。
步骤:
1、获取另一个应用的上下文
packageName是应用的包名
other=createPackageContext(packageName, CONTEXT_IGNORE_SECURITY);
2、获得SharedPreferences对象。
具体demo代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onPhone(View v){ Intent intent = new Intent( Intent.ACTION_CALL, Uri.parse("tel:" +getOherAppXml("com.example.phonewrite") )); startActivity(intent); MainActivity.this.finish(); System.exit(0); } private String getOherAppXml(String packageName){ Context other=null; try { other=createPackageContext(packageName, CONTEXT_IGNORE_SECURITY); SharedPreferences preferences=other.getSharedPreferences("Config", other.MODE_WORLD_READABLE); return preferences.getString("phone", "13047220888"); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
被访问应用的关键代码如下:
public class MainActivity extends ActionBarActivity { private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText=(EditText) findViewById(R.id.ed_write_phone); } public void onPhone(View v){ SharedPreferences preferences=getSharedPreferences("Config",MODE_WORLD_READABLE); preferences.edit().putString("phone", mEditText.getText().toString().trim()).commit(); Toast.makeText(MainActivity.this,"提交成功",0).show(); } }