我有两个app app,名为" A"和另一个名为" B" ,方案类似于应用程序B集成在应用程序A中,而应用程序B有一个名为CLoginSessionManagement
的类,其中包含存储在该类中的用户数据的代码。我想要在App" A"从CLoginSessionManagement
访问用户数据,并在用户登录时生成条件。我怎么能这样做?
CLoginSessionManagement的代码:
public class CLoginSessionManagement {
// User name (make variable public to access from outside)
public static final String s_szKEY_MOBILE = "agentcode";
// Email address (make variable public to access from outside)
public static final String s_szKEY_PASSWORD = "pin";
// Sharedpref file name
private static final String s_szPREF_NAME = "LoginData";
// All Shared Preferences Keys
private static final String s_szIS_LOGIN = "IsLoggedIn";
private final SharedPreferences m_LOGIN_PREF;
private final Editor m_EDITOR;
private final Context m_CONTEXT;
// Constructor
@SuppressLint("CommitPrefEdits")
public CLoginSessionManagement(Context m_CONTEXT) {
this.m_CONTEXT = m_CONTEXT;
m_LOGIN_PREF = m_CONTEXT.getSharedPreferences(s_szPREF_NAME, Context.MODE_PRIVATE);
m_EDITOR = m_LOGIN_PREF.edit();
}
// Registeration Session Management....
public void setLoginData(String mobile, String pin) {
m_EDITOR.putBoolean(s_szIS_LOGIN, true);
m_EDITOR.putString(s_szKEY_MOBILE, mobile);
m_EDITOR.putString(s_szKEY_PASSWORD, pin);
m_EDITOR.commit();
}
/**
* checkLogin() session wil check user Login status
* If false it will redirect user to Login page
* Else won't do anything
*/
public boolean checkLogin() {
if (!isLogin()) {
Intent i = new Intent(m_CONTEXT, CMainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
m_CONTEXT.startActivity(i);
return true;
}
return false;
}
/**
* Get stored Login session data
*/
public HashMap<String, String> getLoginDetails() {
HashMap<String, String> user = new HashMap<>();
// user name
user.put(s_szKEY_MOBILE, m_LOGIN_PREF.getString(s_szKEY_MOBILE, null));
// user email id
user.put(s_szKEY_PASSWORD, m_LOGIN_PREF.getString(s_szKEY_PASSWORD, null));
// return user
return user;
}
public boolean isLogin() {
return m_LOGIN_PREF.getBoolean(s_szIS_LOGIN, false);
}
/**
* Clear session details
*/
public void logoutUser() {
// Clearing all data from Shared Preferences
m_EDITOR.clear();
m_EDITOR.commit();
@SuppressWarnings("UnusedAssignment") final AppCompatActivity activity = (AppCompatActivity) m_CONTEXT;
Intent i = new Intent(m_CONTEXT, CLoginScreen.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
m_CONTEXT.startActivity(i);
((AppCompatActivity) m_CONTEXT).finish();
}
}
m_oLoginSession = new CLoginSessionManagement(CLoginScreen.this);// object creatiion of Login session.
答案 0 :(得分:0)
我只是看看android开发文档,它声明SharedPreferences对您的应用程序是私有的。您可以尝试内容提供商:
Android提供了一种方法,您可以使用内容提供商将您的私人数据公开给其他应用程序。
参考链接:
答案 1 :(得分:0)
由于SharedPreferences受android-os保护,因此您必须将内容存储并加载到两个应用程序都可以读/写的文件目录中。
执行此操作的技巧用您自己的代码替换android-sandbox Context
。
而不是调用MyActivity.this.getSharedPreferences(...)
,而是使用
Context context = new PublicPreferencesContext(MyActivity.this);
context.getSharedPreferences(...);
这是所有魔法发生的地方:
class PublicPreferencesContext extends ContextWrapper {
public PublicPreferencesContext(Context base) {
super(base);
}
// overwrite the shared-preferences specific functions here
// getSharedPreferences, ...
}
我做过类似change the location where the database is stored的事情,效果很好。这样做也可以使用SharedPreferences。
如果这对你有用,请告诉我们,并为我们提供PublicPreferencesContext
答案 2 :(得分:-1)
SharedPreferences
只存在自己的包
你可以尝试学习:
content provider
aidl (IPC)