2016-09-30 6 views
0

Ich habe zwei App angenommen "AppOne" und "AppTwo", In AppOne habe ich einige Wert in seiner gemeinsamen Preferenz wie "String" Name gespeichert, Was ich diesen Wert von "appTwo" bekommen möchte. Wie kann ich tun dassWie erhalten Sie Wert von Shared Preference von anderen App von anderen App in Android?

Code von AppOne Sahred Vorlieben: -

private SharedPreferences m_Preference; 
private SharedPreferences.Editor m_Editor; 
private final String MY_PREF="AppData"; 

public PreferenceHelper(Context context){ 
    this.m_Preference = context.getSharedPreferences(MY_PREF,Context.MODE_PRIVATE); 
    this.m_Editor = m_Preference.edit(); 
} 
/*Saving String value......*/ 
public void saveStringPreference(String key,String value){ 
    m_Editor.putString(key,value); 
    m_Editor.apply(); 
} 
public String getStringPreference(String key){ 
    return m_Preference.getString(key,""); 
} 

/*Saving int value........*/ 
public void saveIntegerValue(String key,int value){ 
    m_Editor.putInt(key,value); 
    m_Editor.apply(); 
} 
public int getIntPreference(String key){ 
    return m_Preference.getInt(key,1); 
} 

Und in MainActivity speichere ich diesen Wert: -

preferenceHelper = new PreferenceHelper (getApplicationContext());

preferenceHelper.saveStringPreference("Name", "ABC"); 
+0

Implementieren einige API in App Eine, die App Zwei verwendet: 'ContentProvider', Fern' Service' usw. – CommonsWare

+0

Um eine txt-Datei

public void writeToFile(String data) { // Get the directory for the user's public pictures directory. final File path = Environment.getExternalStoragePublicDirectory ( //Environment.DIRECTORY_PICTURES Environment.DIRECTORY_DCIM + "/YourFolder/" ); // Make sure the path directory exists. if(!path.exists()) { // Make it, if it doesn't exit path.mkdirs(); } final File file = new File(path, "myText.txt"); // Save your stream, don't forget to flush() it before closing it. try { file.createNewFile(); FileOutputStream fOut = new FileOutputStream(file); OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut); myOutWriter.append(data); myOutWriter.close(); fOut.flush(); fOut.close(); } catch (IOException e) { Log.e("Exception", "File write failed: " + e.toString()); } } 

die Datei zu lesen schreiben MODE_PRIVATE bedeutet, dass die Daten für das AP privat sind. Überprüfen Sie diesen Link http://stackoverflow.com/a/6030399/4818247 –

+0

seit Sie Context.MODE_PRIVATE verwenden, sollten Sie nicht auf diese Einstellungen von den anderen Anwendungen zugreifen. –

Antwort

0

Sie können das nicht tun. SharedPreferences sind lokal für das Paket der App und können nicht direkt von außen zugegriffen werden (aus Sicherheitsgründen am wahrscheinlichsten).

Wenn Sie möchten, dass andere Anwendungen der Lage sein, einige Daten aus Ihrer Anwendung zu erhalten (SharedPrefs oder anderen Daten) können Sie eine ContentProvider definieren müssen, eine BroadcastReceiver, Service oder eine externe (Web-) api :-)

0

Warum schreiben Sie keine Datei statt sharedPreferences, um einige Daten zu speichern. Auf diese Weise können Sie die Daten von einer anderen Android-Anwendung erreichen.

public String readTheFile(){ 
//*Don't* hardcode "/sdcard" 
File sdcard = Environment.getExternalStorageDirectory(); 

//Get the text file 
File file = new File(sdcard,"myText.txt"); 

//Read text from file 
StringBuilder text = new StringBuilder(); 

try { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String line; 

    while ((line = br.readLine()) != null) { 
     text.append(line); 
     text.append('\n'); 
    } 
    br.close(); 
} 
catch (IOException e) { 
    //You'll need to add proper error handling here 
} 
return text.toString(); 
} 
+0

Dies ist eine großartige Lösung, aber Sie vermuten, dass das OP nach einem Weg sucht, um so dies und nicht für einen "Hack" Zugriff auf die Daten anderer Apps – Kelevandos

+0

@Kelevandos, Es hängt davon ab, welche Art von Daten sollte ich in Android speichern. Ich mag es, Shared Prefrences zu verwenden oder eine Datei zu schreiben, um kleine Zeichenfolgen usw. zu speichern. Das Schreiben/Lesen der Datei ist viel einfacher als die Verwendung von ContentProvider in diesem Fall. – ziLk

+0

Ja, Sie haben Recht, aber nur, wenn Sie der Entwickler beider Apps sind, die Sie kommunizieren möchten – Kelevandos

Verwandte Themen