Как получить значение из общего предпочтения другого приложения из другого приложения в android?

У меня есть два приложения,пусть «AppOne» и «AppTwo», в AppOne у меня есть некоторое значение, хранящееся в его общем Префренсе, как «String «name», что я хочу получить это значение из «appTwo».Как я могу это сделать

код предпочтения AppOne Sahred:-

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

2 ответа

  1. Вы не можете этого сделать. SharedPreferencesявляются локальными для пакета приложения и не могут быть доступны непосредственно извне (по соображениям безопасности, скорее всего).

    Если вы хотите, чтобы другие приложения могли получать некоторые данные из вашего приложения (SharedPrefsили любые другие данные), вам нужно будет определитьContentProviderBroadcastReceiver, внешний Service(веб) api 🙂

  2. Почему бы вам не написать файл вместо того, чтобы использовать 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();
    }