Android 我无法获取其他应用程序的共享首选项
我是Android新手。我正在尝试在另一个应用程序中访问一个应用程序的SharedReferences。 但我没有得到这些价值观 我的代码贴在下面 在SharedPref1中创建.javaAndroid 我无法获取其他应用程序的共享首选项,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,
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中被取消。
请检查此项