50

私はAndroidアプリケーションを開発しています。私はアンドロイド2.2を使用しています

私のアプリケーションでは、GPSデータをキャプチャし、1時間間隔でサービスに送信しています。ユーザーがアプリケーションを終了すると、それも機能します(必須です)。

2つのサービス(ユーザー定義)を使用しています。1つはGPSデータのキャプチャ用で、もう1つはサーバーへの送信用です。

ここに私の疑い

  • サービスでは、共有設定を使用できますか?

  • アプリケーションのアクティビティで共有設定にデータを保存した場合、共有設定を使用してそのデータをサービスで使用できますか?

4

5 に答える 5

47

次のコマンドを呼び出すことで、すべてのクラスActivityとクラスで共有されるデフォルトの共有設定インスタンスにアクセスできます。ServicePreferenceManager.getDefaultSharedPreferences(Context context)

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

これは、単純なプリミティブ(ブール値など)またはシリアル化可能なオブジェクトを格納するのに最適です。ただし、大量の位置データをキャプチャする場合は、代わりにSQLiteデータベースの使用を検討することをお勧めします。

于 2012-11-26T04:31:23.603 に答える
17


私は解決策を見つけます。
サービス内では、次のメソッドを呼び出して共有設定を取得します

myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);


上記のコードでは、 myappはApplicationから派生したアプリケーションクラスのオブジェクトです。

于 2012-11-28T11:07:54.467 に答える
8

はいShivkumar、アクティビティで使用しているのと同じように、あらゆる種類のサービスで共有設定を使用できます。

同じように

SharedPreferences preferences = getSharedPreferences("<PrefName>",
            MODE_PRIVATE);
于 2012-11-26T04:25:58.573 に答える
8

共有設定にアクセスするには、コンテキストが必要です。最良の方法は、クラス MyApplicationの子孫として作成し、そこでインスタンス化して、アプリケーションの残りの部分で次のように使用することです。ApplicationpreferencesMyApplication.preferences

public class MyApplication extends Application {
    public static SharedPreferences preferences;

    @Override
    public void onCreate() {
        super.onCreate();

        preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);

たとえば、別の場所で設定にアクセスする必要がある場合は、これを呼び出して設定を読み取ることができます。

String str = MyApplication.preferences.getString( KEY, DEFAULT );

または、これを呼び出して、設定に何かを保存することもできます。

MyApplication.preferences.edit().putString( KEY, VALUE ).commit();

commit()(設定を追加または変更した後は、電話することを忘れないでください!)

于 2012-11-26T04:22:26.810 に答える
5

次のインスタンスを作成する方法は2つありますSharedPreference

ケース1:

SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);

ケース2:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

異なる場所でも同じ名前(ケース1)または同じコンテキスト(ケース2)で設定を作成した場合でも、それは同じであり、明らかにデータを共有できることに注意してください。

于 2017-05-08T10:06:05.750 に答える