web-dev-qa-db-ja.com

Android:SharedPreferencesファイルを表示していますか?

デバッグの目的で、アプリケーションの共有設定ファイルにアクセスする必要があります。私の知る限り、このファイルは/ data/...にあるはずですが、/ dataフォルダにアクセス権がないためアクセスできません。これは正常ですか?まだファイルにアクセスする方法はありますか? (たぶん、アプリケーション内からそれをレイドすることを除いて?)電話はルート化されておらず、私もそれをルート化したくない。ヒントをありがとう!

20
stefan.at.wpf

私は過去にこの問題に遭遇しました(ファイルシステムに対するroot権限を持っていませんが、アプリケーションデータフォルダーへのアクセスが必要です)。ルート権限を取得されたデバイスやADP1などの開発者デバイスがない場合は、エミュレータでアプリケーションを実行し、EclipseまたはDDMSの「ファイルエクスプローラ」からファイルにアクセスしてみてください。

編集#1:sharedPreferencesの getAll 関数を使用してファイルに保存してみてください。サンプルを一緒に投げられるかどうかを確認します。

編集#2:ネット上のランダムなサンプルから作成されたサンプルコードは、おそらくそれを行うための最良の方法ではありませんが、私はそれをテストし、機能しました。それはあなたのSDカードのルートにファイルを書き込みます。あなたが持っていることを確認してください

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" /> 

マニフェストに設定

private void saveSharedPreferences()
{
    // create some junk data to populate the shared preferences
    SharedPreferences prefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    SharedPreferences.Editor prefEdit = prefs.edit();
    prefEdit.putBoolean("SomeBooleanValue_True", true);
    prefEdit.putInt("SomeIntValue_100", 100);
    prefEdit.putFloat("SomeFloatValue_1.11", 1.11f);
    prefEdit.putString("SomeStringValue_Unicorns", "Unicorns");
    prefEdit.commit();

    // BEGIN EXAMPLE
    File myPath = new File(Environment.getExternalStorageDirectory().toString());
    File myFile = new File(myPath, "MySharedPreferences");

    try
    {
        FileWriter fw = new FileWriter(myFile);
        PrintWriter pw = new PrintWriter(fw);

        Map<String,?> prefsMap = prefs.getAll();

        for(Map.Entry<String,?> entry : prefsMap.entrySet())
        {
            pw.println(entry.getKey() + ": " + entry.getValue().toString());            
        }

        pw.close();
        fw.close();
    }
    catch (Exception e)
    {
        // what a terrible failure...
        Log.wtf(getClass().getName(), e.toString());
    }
}

ソース OneTwoThree

17
snctln

ルート権限を取得していない電話では、残念ながら/ dataフォルダにアクセスするための良い方法はありません。次のように、MODE_WORLD_READABLEを使用してファイルを作成してみてください。

SharedPreferences myPrefs = this.getSharedPreferences("prefs", MODE_WORLD_READABLE);

次に、adb pullを使用して、ファイルをデスクトップにフェッチします。

adb pull /data/data/<packagename>/shared_prefs/prefs.xml

しかし、走行距離は異なる場合があります。

1
Femi

stethoを使用すると、SharedPreferencesデータに簡単にアクセスして変更できます。以下に提供されているリンクに従って、Androidプロジェクトに追加し、データを表示します。

http://facebook.github.io/stetho/

0
Avik Chowdhury