Android 我无法获取其他应用程序的共享首选项

Android 我无法获取其他应用程序的共享首选项,android,sharedpreferences,android-sharing,Android,Sharedpreferences,Android Sharing,我是Android新手。我正在尝试在另一个应用程序中访问一个应用程序的SharedReferences。 但我没有得到这些价值观 我的代码贴在下面 在SharedPref1中创建.java package com.example.sharedpref1; public class Create extends Activity implements OnClickListener{ EditText et1,et2; Button btn; String LogID,

我是Android新手。我正在尝试在另一个应用程序中访问一个应用程序的SharedReferences。 但我没有得到这些价值观

我的代码贴在下面

在SharedPref1中创建.java

package com.example.sharedpref1;

public class Create extends Activity implements OnClickListener{

    EditText et1,et2;
    Button btn;
    String LogID,Pwd;
    public SharedPreferences loginDetails;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.create);

        et1 = (EditText)findViewById(R.id.etC1);
        et2 = (EditText)findViewById(R.id.etC2);
        btn = (Button)findViewById(R.id.bCreate);
        loginDetails = getSharedPreferences("logid", MODE_WORLD_READABLE);

        btn.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {

        if(v.getId() == R.id.bCreate)
        {
            LogID = et1.getText().toString();
            Pwd = et2.getText().toString();
            Toast.makeText(getApplicationContext(), "User Profile Createad With\nUser ID: "+LogID +"\nPassword: "+Pwd, Toast.LENGTH_LONG).show();
            SharedPreferences.Editor store = loginDetails.edit();
            store.putString("logid", LogID);
            store.putString("pass", Pwd);
            store.commit();

            finish();

        }
    }
}
SharedPref2中的Show.java

package com.example.sharedpref2;

public class Show  extends Activity implements OnClickListener{

    EditText log,pwd;
    Button back;
    public SharedPreferences loginDetails;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.show);

        log = (EditText)findViewById(R.id.etid);
        pwd = (EditText)findViewById(R.id.etPwd);
        back = (Button)findViewById(R.id.bBack);

        back.setOnClickListener(this);

        loginDetails = getSharedPreferences("logid", MODE_WORLD_READABLE);

        log.setText(loginDetails.getString("logid", "defValue"));
        pwd.setText(loginDetails.getString("pass", "defValue"));
    }

    }
我得到的值如下所示

我正在尝试在另一个应用程序中访问一个应用程序的SharedReference

这是个坏主意。引述:

SharedPreference加载标志:设置后,将检查磁盘上的文件是否修改,即使在此过程中已加载共享首选项实例。当应用程序有多个进程,所有进程都写入同一个SharedReferences文件时,有时需要这种行为不过,流程之间通常有更好的沟通方式。

(增加重点)

此外,唯一可行的方法是让
SharedReferences
MODE\u WORLD\u可读
,这意味着任何应用程序都可以访问这些首选项。有天赋的程序员不会这样做,但会使用其他IPC机制,将通信限制在两个应用程序之间,并且仅在用户许可的情况下进行,以便不会将用户数据泄露给其他人


最后,您没有任何可以跨流程工作的代码
getSharedReferences()
将获得您自己流程的首选项。我能想到的从另一个进程获取
SharedReferences
的唯一方法是在通过
createPackageContext()
创建的
上下文上调用
GetSharedReferences()
,我还没有尝试过这个方法,因为我不会梦想实现您的建议。

如果您需要在应用程序之间共享内容,我建议使用内容提供商,而不是共享引用。根据我的经验,在这种情况下,SharedPreferences是不可靠的

可读取的模式在API级别17中被取消。

请检查此项