そのため、ユーザーの位置を取得する必要があるアプリを作成することを計画しています。このアプリには、インターフェイスLocationController
を実装するクラスが呼び出されLocationListener
ます。
私が達成したいのは、メイン アクティビティ (MainActivity
今のところ呼び出す) が (そのonCreate
メソッドで)開始されるとすぐにLocationController
オブジェクトを呼び出し、位置の修正と更新の取得を開始することです。
ただし、メイン アクティビティがシャットダウンされた後も実行し続ける IntentService または Service も実装する必要があります (つまり、 and または が呼び出されますonPause
) onStop
。場所の読み。LocationController
onCreate
ここで、アクティビティからサービスにデータを渡す方法を検討し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