そのため、ユーザーの位置を取得する必要があるアプリを作成することを計画しています。このアプリには、インターフェイスLocationControllerを実装するクラスが呼び出されLocationListenerます。
私が達成したいのは、メイン アクティビティ (MainActivity今のところ呼び出す) が (そのonCreateメソッドで)開始されるとすぐにLocationControllerオブジェクトを呼び出し、位置の修正と更新の取得を開始することです。
ただし、メイン アクティビティがシャットダウンされた後も実行し続ける IntentService または Service も実装する必要があります (つまり、 and または が呼び出されますonPause) onStop。場所の読み。LocationControlleronCreate
ここで、アクティビティからサービスにデータを渡す方法を検討しSerializable、 、BundleおよびParcelオブジェクトを調べましたが、それらのどれも渡すことができないLocationListenerか、またはLocationオブジェクトなので、それは私にとってあまりオプションではありません(何かを見逃していない限り、その場合、私は提案を受け入れます)。
私が考えたもう1つのオプションは、おそらく静的オブジェクトを使用することでした。基本的に、 をLocationController静的クラスにして、MainActivityがそのメソッドを呼び出して位置情報の取得を開始できるようにしますが、MainActivity終了後も存在し続けるようにします。ただし、これを行う方法についてはまだあいまいです。たとえば、全体LocationControllerを静的オブジェクトにしますか、それともそのメソッドの一部を静的にしますか?
誰でもこれで私を助けることができますか?
更新:
そこで、カブコのアドバイスを受けて、主な活動クラスについて次のように書きました。
public void setLocationController() {
if (locationController == null)
this.locationController = new LocationController(this);
}
と
public static LocationController getLocationController() {
// make sure to have called setLocationController() early in your
// activity's life. onCreate is a good place
return this.locationController;
}
を設定し、シングルトンを作成しますが、IntentService クラスの Location Controller にアクセスする ( と呼びますMyService) ために、次のようにメイン アクティビティ クラスの静的メンバーとして Location Controller にアクセスしました。
public class MyService extends IntentService {
private LocationController locationController = null;
public MyService() {
super("MyService");
locationController = MainActivity.getLocationController();
...
}
....
} // end of class