6

MapView を使用して、ユーザーの現在地を地図上に表示しています。ユーザーが移動中に場所を更新するには、次の選択肢があります。

  • MyLocationOverlay を使用して現在の場所を描画し、それを拡張して移動中のユーザーの場所を追跡し、カスタム マーカーを設定できます。MyLocationOverlay の問題は、デバイスが GPS から位置情報を要求する頻度を制御できないことです。ここで電池の減りが気になります。
  • Location Manager を使用し、requestLocationUpdates を使用してサブスクライブして、GPS から位置を取得できます。ここでは、GPS がクエリされる頻度をより詳細に制御できます。LocationListener を接続して、そこにコードを記述できます。

しかし、私は SO でここで、Location Manager を使用するのは適切なアプローチではない可能性があることを読みました。これよりも MyLocationOverlay を優先する必要があります。

また、私のアプリはロケーションベースのアプリであり、ユーザーの移動に合わせてユーザーの位置を追跡する必要があることを考慮してください。

人々は、実装するのに最適なアプローチであり、バッテリーへの影響が比較的少ないことを提案できますか?

私はAndroidの初心者なので、明らかな間違いがあることをご容赦ください。

前もってありがとう、アンディ

4

2 に答える 2

2

私はLittle Fluffy Locationを使用しています-そのライブラリで、更新または距離の時間を設定します。このライブラリはブロードキャストレシーバーを作成し、LocationListenerを実装し、位置が変更されたときにアプリケーションに通知します。

シンプル、高速、簡単!

このリンクを参照してください:

場所を変更したら、地図上のオーバーレイを更新してください! =)

必要に応じて、場所の完全なソリューションをお送りします。

于 2012-11-21T13:50:17.123 に答える
1

Little Fluffy Location の使用 1º:

マニフェストで:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>


<Application...>
<service android:name="com.littlefluffytoys.littlefluffylocationlibrary.LocationBroadcastService" />

    <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.StartupBroadcastReceiver" android:exported="true">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
      </intent-filter>  
    </receiver>
    <receiver android:name="com.littlefluffytoys.littlefluffylocationlibrary.PassiveLocationChangedReceiver" android:exported="true" />

2º アプリケーションを拡張するクラスを作成する

public class YourApplication extends Application {
    public void onCreate(){
        super.onCreate();
        LocationLibrary.showDebugOutput(true);
        LocationLibrary.initialiseLibrary(getBaseContext(), 0, 2 * 60 * 1000, "com.yourpackage.broadcastpackage");      
    }

    public static Context getAppContext() {
        return ApplicationVexPromoter.context;
    }
}

3º ブロードキャスト レシーバーの作成

public class Broadcast extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
       final LocationInfo locationInfo = (LocationInfo) intent.getSerializableExtra(LocationLibraryConstants.LOCATION_BROADCAST_EXTRA_LOCATIONINFO);

    }
}

そして使用:

あなたの活動で:

public class YourActivity extends Activity {

LocationInfo info;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.id.yourview);
        info = new LocationInfo(getBaseContext());
        double latitude = info.lastLat;
        double longitude = info.lastLong;
    }
}

もっといります? こちらをご参照ください

私のために働く!

于 2012-11-26T15:50:32.837 に答える