2016-07-06 5 views
4

Ich habe zwei App eine App heißt "A" und eine andere App mit dem Namen "B", Szenario ist so etwas wie App B ist in App A integriert und App B hat eine Klasse namens CLoginSessionManagement, die Code für Benutzerdaten gespeichert enthalten in dieser Klasse.Was ich will in App "A" auf Benutzerdaten von CLoginSessionManagement zuzugreifen und Bedingung machen, wenn Benutzer sich anmeldet oder nicht. Wie kann ich das machen?Wie Zugriff auf freigegebene Preference-Daten von anderen App in Android?

-Code für 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. 

Antwort

-1

SharedPreferences nur selbst existieren verpacken können Sie lernen, versuchen:

  1. content provider
  2. aidl (IPC)
0

Seit SharedPreferences von android-o geschützt ist, müssen Sie den Inhalt in einem Dateiverzeichnis speichern und zu laden, die beide apps/Schreib lesen können.

Der Trick, dies zu tun, ersetzen Sie die Android-Sandbox Context mit Ihrem eigenen Code.

Statt MyActivity.this.getSharedPreferences(...) aufzurufen verwenden Sie

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

Hier ist, wo alles geht:

class PublicPreferencesContext extends ContextWrapper { 
    public PublicPreferencesContext(Context base) { 
     super(base); 
    } 

    // overwrite the shared-preferences specific functions here 
    // getSharedPreferences, ... 
} 

ich etwas ähnliches wie change the location where the database is stored wich sehr gut funktioniert getan haben. Dies mit SharedPreferences sollte auch funktionieren.

Wenn dies für Sie funktioniert, lassen Sie es uns wissen und geben Sie uns den vollständigen Quellcode für PublicPreferencesContext

Verwandte Themen