跨应用程序访问共享首选项

时间:2013-06-26 14:41:10

标签: android sharedpreferences

我在我的应用程序中使用getDefaultSharedPreferences(con)来存储首选项。现在我想在另一个应用程序中访问此共享首选项。 我使用了以下方法:

con = this.createPackageContext("com.example.preferences", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences filePref = PreferenceManager.getDefaultSharedPreferences(con);
            if(filePref != null){
                Toast.makeText(getApplicationContext(), "file pref not null --- ", Toast.LENGTH_LONG).show();   
            }else{
                Toast.makeText(getApplicationContext(), "file pref is null **** ", Toast.LENGTH_LONG).show();
            }
            Map<String,?> allkeys = filePref.getAll();
            Toast.makeText(getApplicationContext(), "file pref size **** "+allkeys.size(), Toast.LENGTH_LONG).show();
            for(Map.Entry<String,?> entry : allkeys.entrySet()){
                Toast.makeText(getApplicationContext(), "~~~ file pref --- map values --- "+entry.getKey() + ": "+entry.getValue().toString(), Toast.LENGTH_LONG).show();
            }

尝试的另一种方法是指定文件名&amp;访问它,如下;

SharedPreferences filePref = gvcon.getSharedPreferences("com.example.preferences_preferences", Context.MODE_PRIVATE);

使用此方法,我可以访问SharedPrefernce文件,它返回文件不为null但是当我检查文件大小时,它显示0.我无法从文件中读取首选项值。 我使用了另一个应用程序的shareduserid,以便我可以完全访问该应用程序。 什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解了您的问题,但有时候这种实现方式可以帮助您跨包访问数据。 使用getSharedPreferences()将数据存储在共享首选项中

此方法将数据存储在共享首选项

public void dataWriter(){
    String strShareValue = "Hello! this is shared data";
    SharedPreferences prefs = getSharedPreferences("demopref",Context.MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("demostring", strShareValue);
    editor.commit();
}

您可以使用此代码示例

从其他包访问该共享数据
public void dataRead(){
 Context con;
     try {
         con = createPackageContext("PACKAGE NAME THAT SHARES DATA", 0);
         SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE);
         String dataShared = pref.getString("demostring", "No Value");
      }
     catch (NameNotFoundException e) {
         Log.e("Not data shared", e.toString());
      }
    }
}