¿Cómo acceder a los datos compartidos de prefrence de otra aplicación en android?

Tengo dos aplicaciones de una aplicación se llama como "A" y otra aplicación llamada "B", el escenario es algo así como la aplicación B está integrado en la aplicación A y la App B tiene una clase llamada CLoginSessionManagement que contienen código para los datos de usuario almacenados en ese class.What que quiero en la aplicación "A" para acceder a los datos de usuario de CLoginSessionManagement y hacer la condición si el usuario es el inicio de sesión o no. ¿Cómo puedo hacer eso?

Código para 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. 

Acabo de echar un vistazo a android dev docs y afirma que SharedPreferences es privado para su aplicación. Puede probar el proveedor de contenido:

Android proporciona una forma de exponer incluso sus datos privados a otras aplicaciones, con un proveedor de contenido.

Enlaces de referencia:

Dado que SharedPreferences está protegido por android-os tienes que almacenar y cargar el contenido en un directorio de archivos que ambas aplicaciones pueden leer / escribir.

El truco para hacer esto reemplazar el Context caja de arena de Android con su propio código.

En lugar de llamar a MyActivity.this.getSharedPreferences(...) utiliza

 Context context = new PublicPreferencesContext(MyActivity.this); context.getSharedPreferences(...); 

Aquí es donde ocurre toda la magia:

 class PublicPreferencesContext extends ContextWrapper { public PublicPreferencesContext(Context base) { super(base); } // overwrite the shared-preferences specific functions here // getSharedPreferences, ... } 

He hecho algo similar para cambiar la ubicación donde se almacena la base de datos que funciona muy bien. Hacer esto con SharedPreferences debería funcionar también.

Si esto funciona para usted por favor háganoslo saber y darnos el código fuente completo para PublicPreferencesContext

SharedPreferences solo existe paquetes Puede intentar aprender:

  1. content provider
  2. aidl (IPC)
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.