android - 如何访问android中其他应用程序的共享偏好数据?

标签 android android-sharedpreferences

我有两个应用,一个应用名为“A”,另一个应用名为“B”,场景类似于应用 B 集成在应用 A 中,应用 B 有一个名为 CLoginSessionManagement 其中包含存储在该类中的用户数据的代码。我希望在应用程序“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.

最佳答案

我刚刚查看了 android 开发文档,它指出 SharedPreferences 对您的应用程序是私有(private)的。您可以尝试内容提供者:

Android provides a way for you to expose even your private data to other applications — with a content provider.

引用链接:

关于android - 如何访问android中其他应用程序的共享偏好数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215651/

相关文章:

android - Volley 无法创建缓存目录。无法清理文件

android - 在 Cordova 应用程序中使用 cordova-plugin-firebase-analytics 插件在 Android 上出现无效的 google_app_id 错误

Android:MVP 和 SharedPreferences 中的存储库模式

java - 忽略sharedPreference代码

Android SharedPreferences 用于 shared_prefs 目录之外的文件

java - 将文本从 editText 发送到 ListView(2 个 Activity )

android - 将手机更新到 Android 9 后无法使用 Charles Proxy

android - 有什么方法可以通过tinymix命令捕获音频吗?

java - SharedPreferences 没有更新其值

java - 如何从Android上的sharedPreferences获取多个值?