Android:どのように私のアプリのためのすべての設定XMLのリストを取得し、それらを読むには?

アプリケーションのすべてのアプリケーション設定のリストを取得する方法、

1. I am saving shared preference in this mannerActivity to save key value pair in desired preference xml

2. I know that they are in data/data/app_packagename/shared_prefs Preference Xml's shared_pref folder


3. THE PROBLEM: But how to get list of all preference xml files in a spinner enter image description here

それぞれの設定を読み、 SO で検索しましたが、私のアプリケーションディレクトリ内のすべての設定のxmlファイルを読み込む方法はありませんでした環境設定にアクセスしますか?

P.S: I am aware of SharedPreference.getAll();, will be enough to read once i get the file?

私はビット(ラフコード)で書きました、実行しようとするとエラーが出ます、ここで実装されているメソッドです

void getList()
{
  //will be invoked from onCreate to populate spinner,yes spinner is already binded
   PackageManager m = getPackageManager();
        String s = getPackageName();
        try {
            PackageInfo p = m.getPackageInfo(s, 0);
            s = p.applicationInfo.dataDir;
        } catch (NameNotFoundException e) {
            Log.w("yourtag", "Error Package name not found ", e);
        }
        Log.i("dir", s=s+"/shared_prefs");
     //is this write way, how to proceed from here
}
5
nl ru de

3 答え

これを試して

    File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");

    if(prefsdir.exists() && prefsdir.isDirectory()){
        String[] list = prefsdir.list();
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, android.R.id.text1,list);
        Spinner sp = (Spinner) findViewById(R.id.spinner1);
        sp.setAdapter(adapter);

    }

//選択した項目を取得する

String item = (String) sp.getSelectedItem();
    //remove .xml from the file name
    String preffile = item.substring(0, item.length()-4);

    SharedPreferences sp2 = getSharedPreferences(preffile, MODE_PRIVATE);
    Map
19
追加された
@AndroriderそれはパブリックAPIの一部ではないので、将来のリリースでは同じであることは保証されていませんが、以前のリリースにはすべてこのフォルダがあります
追加された 著者 nandeesh,
答えはちょうど私が探していた、ありがとう!
追加された 著者 Akhil Jain,
"shared_prefs"は常に共有設定ファイルを含むディレクトリの名前であることが保証されていますか?
追加された 著者 Androrider,
public class Preferences extends PreferenceActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

       //load the xml preferences file
        addPreferencesFromResource(R.xml.preferences);
    }
}

あなたのメインクラスでは、あなたは設定を参照することができます

public class DrinkingBuddy extends Activity 
                           implements OnSharedPreferenceChangeListener {

    private int weight;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

       //register preference change listener
        prefs.registerOnSharedPreferenceChangeListener(this);

       //and set remembered preferences
        weight = Integer.parseInt((prefs.getString("weightPref", "120");
       //etc
    }

   //handle updates to preferences
    public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        if (key.equals("weightValues")) {
            weight = Integer.parseInt((prefs.getString("weightPref", "120");
        }
       //etc
    }
}

環境設定の保存はあなたのために処理されます。

(公的/私的宣言についてはあまり確かではありません!)

2
追加された
私の質問に答えることは決してありません
追加された 著者 Akhil Jain,

リフレクションを使用したい場合、@hide関数があります。Context#getSharedPrefsFile(String name)

だからあなたは

Context#getSharedPrefsFile(String name).getParentFile()は、shared_prefsディレクトリへの参照を取得します。

1
追加された