簡體   English   中英

應用程序未使用 GPS 提供商接收有效的 GPS 更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM