[英]App don't receive valid GPS updates using the GPS provider
我收到空的 NMEA 消息,並且在請求 gps 坐標時從未調用onLocationChanged(Location)
。 它僅在通過.network 提供商請求時有效,但隨后我獲得了 2000 米的精度,與融合提供商相同。
這是我的活動:
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.OnNmeaMessageListener;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
public class MainActivity extends Activity implements LocationListener, OnNmeaMessageListener, ActivityCompat.OnRequestPermissionsResultCallback {
private static final String TAG = "MainActivity";
Context context;
double latitude;
double longitude;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
check_permission();
start_gps_manager();
}
@Override
public void onRequestPermissionsResult(int i, @NonNull String[] strings, @NonNull int[] ints) {
Intent intent = getIntent();
finish();
startActivity(intent);
}
public void check_permission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
String[] PERMISSIONS = {android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION};
ActivityCompat.requestPermissions(this, PERMISSIONS, 112);
}
}
LocationManager gpsLocationManager;
private void start_gps_manager() {
gpsLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Log.e(TAG, "Requesting GPS location updates");
// gps satellite based
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
gpsLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
gpsLocationManager.addNmeaListener(this);
}
public void onPause() {
super.onPause();
}
@Override
public void onLocationChanged(Location location) {
longitude = location.getLongitude();
latitude = location.getLatitude();
Log.e(TAG, latitude + " - " + longitude);
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
@Override
public void onNmeaMessage(String s, long l) {
Log.e(String.valueOf(l), s);
}
}
以及 AndroidManifest 的一部分:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
NMEA 消息不包含 gps 或時間數據。 我怎樣才能解決這個問題並獲得准確的 gps 坐標。
以防將來有人遇到同樣的問題:GPS 需要在應用程序接收有效的 gps 坐標之前獲得修復。 這需要一些時間,具體取決於 gps 模塊與 gps 衛星的連接情況。 這意味着您必須等到能夠獲取 gps 坐標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.