私はWindowsアプリケーションプログラマーで、最近はアンドロイドを学び始めました。私は、 "開始"ボタンをクリックした後30秒ごとにGPS座標を定期的に送信するアプリケーションを作成し、 "停止"ボタンをクリックすることで停止する(私は既にデータを受け入れるWebサービスを開発した)。私はタイマーを使用し、すべての "目盛り"にGPS座標を見つけて送信します。アンドロイドでも同様のことがどうやってできるのか理解してください。定期的にGPS座標を送信する
0
A
答えて
0
私のアプリとその動作にどのように使用しているかを確認してください。融合apiを使用しています。
ステップ1. GoogleLocationService.java
public class GoogleLocationService {
private GoogleServicesCallbacks callbacks = new GoogleServicesCallbacks();
LocationUpdateListener locationUpdateListener;
Context activity;
protected GoogleApiClient mGoogleApiClient;
protected LocationRequest mLocationRequest;
public static final long UPDATE_INTERVAL_IN_MILLISECONDS = 30000;
public GoogleLocationService(Context activity, LocationUpdateListener locationUpdateListener) {
this.locationUpdateListener = locationUpdateListener;
this.activity = activity;
buildGoogleApiClient();
}
protected synchronized void buildGoogleApiClient() {
//Log.i(TAG, "Building GoogleApiClient");
mGoogleApiClient = new GoogleApiClient.Builder(activity)
.addConnectionCallbacks(callbacks)
.addOnConnectionFailedListener(callbacks)
.addApi(LocationServices.API)
.build();
createLocationRequest();
mGoogleApiClient.connect();
}
protected void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
private class GoogleServicesCallbacks implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
@Override
public void onConnected(Bundle bundle) {
startLocationUpdates();
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
if (connectionResult.getErrorCode() == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {
Toast.makeText(activity, "Google play service not updated", Toast.LENGTH_LONG).show();
}
locationUpdateListener.cannotReceiveLocationUpdates();
}
@Override
public void onLocationChanged(Location location) {
if (location.hasAccuracy()) {
if (location.getAccuracy() < 30) {
locationUpdateListener.updateLocation(location);
}
}
}
}
private static boolean locationEnabled(Context context) {
boolean gps_enabled = false;
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
try {
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch (Exception ex) {
ex.printStackTrace();
}
return gps_enabled;
}
private boolean servicesConnected(Context context) {
return isPackageInstalled(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, context);
}
private boolean isPackageInstalled(String packagename, Context context) {
PackageManager pm = context.getPackageManager();
try {
pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
public void startUpdates() {
/*
* Connect the client. Don't re-start any requests here; instead, wait
* for onResume()
*/
if (servicesConnected(activity)) {
if (locationEnabled(activity)) {
locationUpdateListener.canReceiveLocationUpdates();
startLocationUpdates();
} else {
locationUpdateListener.cannotReceiveLocationUpdates();
Toast.makeText(activity, "Unable to get your location.Please turn on your device Gps", Toast.LENGTH_LONG).show();
}
} else {
locationUpdateListener.cannotReceiveLocationUpdates();
Toast.makeText(activity, "Google play service not available", Toast.LENGTH_LONG).show();
}
}
//stop location updates
public void stopUpdates() {
stopLocationUpdates();
}
//start location updates
private void startLocationUpdates() {
if (checkSelfPermission(activity, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(activity, ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
if (mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, callbacks);
}
}
public void stopLocationUpdates() {
if (mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, callbacks);
}
}
public void startGoogleApi() {
mGoogleApiClient.connect();
}
public void closeGoogleApi() {
mGoogleApiClient.disconnect();
}
}
ステップ2をこのクラス してください。このインタフェース LocationUpdateListener.java
public interface LocationUpdateListener {
/**
* Called immediately the service starts if the service can obtain location
*/
void canReceiveLocationUpdates();
/**
* Called immediately the service tries to start if it cannot obtain location - eg the user has disabled wireless and
*/
void cannotReceiveLocationUpdates();
/**
* Called whenever the location has changed (at least non-trivially)
* @param location
*/
void updateLocation(Location location);
/**
* Called when GoogleLocationServices detects that the device has moved to a new location.
* @param localityName The name of the locality (somewhere below street but above area).
*/
void updateLocationName(String localityName, Location location);
}
ステップあなたのOnCreate
プライベートGoogleLocationService googleLocationService 3.コールにこれを行います。
googleLocationService = new GoogleLocationService(context, new LocationUpdateListener() {
@Override
public void canReceiveLocationUpdates() {
}
@Override
public void cannotReceiveLocationUpdates() {
}
//update location to our servers for tracking purpose
@Override
public void updateLocation(Location location) {
if (location != null) {
Timber.e("updated location %1$s %2$s", location.getLatitude(), location.getLongitude());
}
}
@Override
public void updateLocationName(String localityName, Location location) {
googleLocationService.stopLocationUpdates();
}
});
googleLocationService.startUpdates();
and call this onDestroy
if (googleLocationService != null) {
googleLocationService.stopLocationUpdates();
}
希望すると、問題を解決するのに役立ちます。
0
RxGpsService(RxJavaを使用してGPSのロケーションとルートの統計情報を取得するAndroidサービス)をご覧ください。現在の速度、距離、経過時間およびウェイポイントを含むRouteStatsオブジェクトを取得します。また、クロノが停止しているときに、クロノを再生/停止して位置を破棄することもできます。
関連する問題
- 1. GPS座標を連続的に送信する
- 2. 自動SMSでGPS座標を送信
- 3. GPS座標送信の停止Android
- 4. ストリーム経由でAndroid GPS座標を送信する
- 5. SMSまたは電子メールでGPS座標を送信する
- 6. 2台の電話機間でGPS座標を送信する
- 7. JSONを使用してサーバーにGPS座標を送信
- 8. Java Android GPSは座標を送信します
- 9. QuickTime GPS座標
- 10. クエリGPS座標
- 11. アプリが最小化されたときにGPS座標を送信する(iPhone)
- 12. GPS座標をGoogleマップに変換する方法座標
- 13. テストデベロッパーのGPS座標
- 14. iPhone GPS座標アップロード
- 15. GPS座標精度
- 16. 定期的にメッセージをハンドラに定期的に送信する
- 17. GPS座標を変数に入れる
- 18. GPS座標のリストから最大および最小GPS座標を決定する
- 19. 定期的にメールを送信する
- 20. 定期的にバルクメールを送信する
- 21. GPS座標の完了ブロック
- 22. GPS座標を取得するWebサービス
- 23. ロケーションのGPS座標を取得する
- 24. GPSを取得する座標:Android
- 25. GPS座標を取得するAndroid Wear
- 26. GPS座標を移動する
- 27. GPS座標を収集する
- 28. イメージのGPS座標を設定するには?
- 29. iphoneのGPS座標を連続的にポーリングできますか?
- 30. gps座標からハウス/ブロック番号を決定する方法
実際にどこから開始して停止していますか? –
あなたはステップ3を見ることができます – Saveen
ウィンドウXNAはタイミングで動作しますが、アンドロイドではアラームマネージャーを使用する必要があります。を確認してください。 –