簡體   English   中英

盡管啟用了提供程序,但在某些設備上嘗試從“網絡”提供程序獲取位置失敗

[英]trying to get location from “network” provider fails on some devices despite the provider being enabled

我正在嘗試編寫一個從“網絡”提供程序獲取當前位置的Android應用(因此,我只需要android.permission.ACCESS_COARSE_LOCATION權限)。 這在某些設備上可以正常工作,但在其他設備上,我似乎無法獲取位置更新。 這是我的代碼。

在onCreate中:

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    provider = LocationManager.NETWORK_PROVIDER;
    Log.v (TAG, "Finding location from provider: " + provider);
    if (CHECK_PROVIDER_ENABLED && !locationManager.isProviderEnabled (provider))
    {
        Toast.makeText (this, "Location provider disabled", Toast.LENGTH_LONG).show ();
    }
    else
    {
        try
        {
            Location location = locationManager.getLastKnownLocation(provider);
            if (location == null)
            {
                Log.i (TAG, "getLastKnownLocation returned null, requesting updates when available");
                locationManager.requestLocationUpdates (provider, 0, 0, locationListener);
            }
            else
                locationListener.onLocationChanged (location);
        }
        catch (IllegalArgumentException e)
        {
            Log.e(TAG, "Failed to get location from provider " + provider, e);
            Toast.makeText (this, "Location provider disabled", Toast.LENGTH_LONG).show ();
        }
    }

locationListener的定義如下:

private LocationListener locationListener = new LocationListener() {

    @Override
    public void onStatusChanged (String provider, int status, Bundle extras)
    {
    }

    @Override
    public void onProviderEnabled (String provider)
    {
    }

    @Override
    public void onProviderDisabled (String provider)
    {
    }

    @Override
    public void onLocationChanged (Location location)
    {
        Toast.makeText (CarouselViewerActivity.this, "" + location.getLatitude () + ", " + location.getLongitude (), Toast.LENGTH_LONG).show ();
        Log.v(TAG, "" + location.getLatitude () + ", " + location.getLongitude ());
        locationManager.removeUpdates (this);
    }
};

在可以正常工作的電話上,這里的一切都正常運行:如果CHECK_PROVIDER_ENABLED為true,則isProviderEnabled測試返回true, getLastKnownLocation返回一個位置而不是null,並且如果我強制進行更新請求,則會收到一個包含位置詳細信息的請求。

但是在其他手機(我正在測試的特定手機是帶有Cyanogenmod 9的Galaxy S2)上, isProviderEnabled測試返回false(盡管啟用了網絡位置的設置項已啟用-請參見LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)可靠,為什么?有關此問題的摘要), getLastKnownLocation返回null,並且在請求更新后,我沒有在合理的時間內收到一個消息(我已經等待了5分鍾)。

我采用的方法有什么問題嗎? 除了啟用此功能所需的網絡位置以外,還有其他方法可以獲取我需要的網絡位置,或者在電話上進行某些設置? 從更基本的層面上講,這里到底出了什么問題?

之前已經在Stack Overflow上報道了與Android Network Provider相關的類似問題,您可以在此處找到。 遇到此問題的人的共識是,有兩種可能的解決方法,當問題明顯時重新啟動設備,或者通過使用Google Play服務API來獲取位置數據,因為似乎存在可靠性問題。 Android 4.0或更高版本的位置管理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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