Androidアプリケーションを開発しています。Android 2.2を使用しています
私のアプリケーションでは、GPSデータをキャプチャし、1時間間隔でサービスに送信しています。ユーザーがアプリケーションを終了した場合も動作します(必須です)。
2つのサービス(ユーザー定義)を使用しています。1つはGPSデータのキャプチャ用で、もう1つはサーバーへの送信用です。
ここで私の疑い
サービスでは、共有設定を使用できますか。
アプリケーションのアクティビティの共有設定にデータを保存する場合、共有設定の助けを借りてそのデータを使用できますか?
解決策を見つけました。
サービス内で次のメソッドを呼び出して、共有設定を取得します
myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);
上記のコードではmyappはApplicationから派生したアプリケーションクラスのオブジェクトです
PreferenceManager.getDefaultSharedPreferences(Context context)
を呼び出すことにより、すべてのActivity
クラスとService
クラスで共有されるデフォルトの共有設定インスタンスにアクセスできます。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
これは、単純なプリミティブ(ブール値など)またはシリアル化可能なオブジェクトの保存に最適です。ただし、大量の位置データをキャプチャしている場合は、代わりにSQLiteデータベースの使用を検討できます。
共有設定にアクセスするにはコンテキストが必要です。最良の方法は、MyApplication
クラスの子孫としてApplication
を作成し、そこにpreferences
をインスタンス化し、アプリケーションの他の部分で_MyApplication.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()
を呼び出すことを忘れないでください!)
はい、シブクマール、アクティビティで使用しているのと同じように、共有設定をあらゆる種類のサービスで使用できます。
同じような
SharedPreferences preferences = getSharedPreferences("<PrefName>",
MODE_PRIVATE);
SharedPreference
のインスタンスを作成するには2つの方法があります。
事例1:
SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);
ケース2:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
異なる場所でも同じ名前(ケース1)または同じコンテキスト(ケース2)で設定を作成した場合、それは同じままであり、明らかにデータを共有できます。