2016-09-30 59 views
0

我有兩個應用程序讓我們假設「AppOne」和「AppTwo」,在AppOne中我有一些值存儲在它的共享Prefrence中,比如「String」name「,我想從」appTwo「得到這個值。我該怎麼辦AppOne Sahred偏好的該如何從android中其他應用的其他應用的共享偏好中獲取價值?

代碼: -

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); 
} 

而在MainActivity我保存值: -

preferenceHelper =新PreferenceHelper(getApplicationContext());

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

實現應用程序的一個部分的API,應用兩個用途:'ContentProvider',遠程'Service'等 – CommonsWare

+0

MODE_PRIVATE表示數據對ap是私有的。檢查此鏈接http://stackoverflow.com/a/6030399/4818247 –

+0

由於您使用Context.MODE_PRIVATE,因此您不應該從其他應用程序訪問此首選項。 –

回答

0

你不能那樣做。 SharedPreferences是本地的應用程序包,不能直接從外部訪問(安全原因,很可能)。

如果你想其他的應用程序能夠從應用(SharedPrefs或任何其它數據)獲得一些數據,你需要定義一個ContentProvider,一個BroadcastReceiverService或外部(網絡)API :-)

0

爲什麼不寫一個文件,而不是使用sharedPreferences來存儲一些數據。 通過這種方式,您可以從另一個Android應用程序獲取數據。

要編寫一個txt文件

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()); 
    } 
} 

讀取文件:

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

這是一個很好的解決方案,但是您認爲OP正在尋找一種方法來實現這一目標,而不是爲了'黑客'訪問其他應用的數據 – Kelevandos

+0

@Kelevandos,它取決於我應該在Android中存儲什麼類型的數據。我喜歡使用sharedprefrences或寫入文件來存儲小字符串等。在這種情況下,打印/讀取文件比使用contentProvider容易得多。 – ziLk

+0

是的,你是對的,但只有當你是你想要溝通的兩個應用程序的開發者 – Kelevandos

相關問題