0

すべて-ストップウォッチを実行しているスポーツトラッカーアプリケーションを使用しているserviceため、ユーザーのデバイスはスリープ状態になり、ストップウォッチを停止する必要はありません。Mapまた、ユーザーがどこに行ったかを確認できるように、アプリにタブを含めたいと考えています。これを達成するためにメインアクティビティを使用しようとしましたが、正常に機能しましたが、電話がスリープ状態になるたびにメインアクティビティが終了し、マップが引き下げられました。これにより、GPS にギャップが生じ、速度や距離を追跡できなくなります。そのため、マップをサービスに入れようとしましたが、サービスを拡張する必要があるなどの問題に遭遇しましたMapActivity(ただし、拡張する必要もありますService)。これが私が試したことです:

public class KeepGoing extends Service { //But also has to extend MapView?  
MapView mapView = null;
MapController mapController = null;
MyLocationOverlay whereAmI = null;

protected boolean isLocationDisplayed() {
    return whereAmI.isMyLocationEnabled();
}

protected boolean isRouteDisplayed() {
    return false;
}

また:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {      
    start();        
    return(START_NOT_STICKY);       
}   

private void start() {

    mHandler.sendEmptyMessage(MSG_START_TIMER);

    LayoutInflater inflater = ( LayoutInflater ) getSystemService( LAYOUT_INFLATER_SERVICE );
    View layout = inflater.inflate( R.layout.activity_main , null );

    mapView = (MapView) layout.findViewById(R.id.mapview);  

    mapView.setBuiltInZoomControls(true);

    mapController = mapView.getController();
    mapController.setZoom(15);

    whereAmI = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(whereAmI);
    mapView.postInvalidate(); }

onDestroyメソッドにマップ関連のコードはありません。私の質問は次のとおりです。デバイスがスリープ状態でも実行されるように、サービスにどのように配置できますか、および/またはこれを達成するための別の/より良い方法はありますか? mapView あなたの時間と努力に感謝します!

4

3 に答える 3

0

ユーザーが行った座標を取得したい場合は、Location Managerを使用できます。

于 2012-08-15T22:05:10.963 に答える
0

ストップウォッチを実行しているサービスで、ストップウォッチを停止せずにユーザーのデバイスをスリープ状態にすることができます

CPU の電源がオフになり、コードの実行が停止するため、デバイスがスリープ状態になると、ストップウォッチは確実に「停止」します。発生しない唯一の方法は、WakeLock.

そうは言っても、時間を追跡するためにデバイスを実行し続ける必要はありません。

これにより GPS にギャップが生じ、速度や距離を追跡できなくなります。

LocationManager独自の GPS 修正を取得するために使用することを歓迎します。ただし、主に常にギャップがあるため、「GPS のギャップ」によって「速度や距離を追跡できなくなる」わけではありません。ギャップがミリ秒か千年かは確かに異なりますが、距離と速度を同じ方法で計算します。距離は 2 つの GPS フィックスの位置を比較することによって決定され、速度は距離を経過時間で割ったものです。

デバイスがスリープ状態でも実行されるように mapView をサービスに配置するにはどうすればよいですか

できません。

および/またはこれを達成するための別の/より良い方法はありますか?

デバイスがスリープ状態に陥った場合により適切に処理できるようにアプリを再設計するか、デバイスがスリープ状態にならないようにandroid:keepScreenOn="true"します(例: MapView、または場所の特定に使用するPARTIAL_WAKE_LOCK内)。ServiceLocationManager

于 2012-08-15T22:06:35.820 に答える
0

サービスで mapview を実行し続けようとする代わりに (既存のアクティビティでも実行される mapview を忘れないでください)、LocationManagerを使用して、ユーザーがアクセスしたポイントを保存する必要があります (LocationManager のrequestLocationUpdateメソッドを使用して検出されます)。 ) ArrayList または同様のデータ構造で、このポイントのリストを使用して、ユーザーが訪れた場所を表示するだけです。

于 2012-08-15T22:08:33.650 に答える