簡體   English   中英

無法在應用程序地圖中獲取我的位置

[英]Can't get my location in the app map

清單中包括:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

活動代碼:

public class ActivityLogin extends AppCompatActivity {
    public static LocationManager mLocationManager;
    public static MyLocationListener locationListener = new MyLocationListener();

    //...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // ...
        ActivityCompat.requestPermissions(ActivityLogin.this,
            new String[] {
                Manifest.permission.ACCESS_FINE_LOCATION
            },
            2);
        // ...

    @Override
    public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
        switch (requestCode) {
            case 2:
                {
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 0, locationListener);
                        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10 * 1000, 0, locationListener);
                        mLocationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 10 * 1000, 0, locationListener);
                    }
                    return;
                }
            }
        }
    }
}

public class MyLocationListener implements LocationListener {
     public void onLocationChanged(Location location) {
         MapsActivity.Mylocation = new LatLng(
             location.getLatitude(), location.getLongitude());
     }

     public void onProviderDisabled(String provider) {
         // ...
     }

     public void onProviderEnabled(String provider) {
         // ...
         Location location = ActivityLogin.mLocationManager
             .getLastKnownLocation(provider);
         if (location != null) {
             MapsActivity.Mylocation = new LatLng(
                 location.getLatitude(), location.getLongitude());
         }
     }

     public void onStatusChanged(String provider, int status, Bundle extras) {
         // ...    
     }
 }

結果,不會發生onLocationChanged事件。 如果我關閉wifi然后再打開, onProviderEnabled發生onProviderEnabled事件,並且ActivityLogin.mLocationManager.getLastKnownLocation(provider)返回null

最后,我無法獲取坐標。

過去我在locationListener上遇到麻煩,而讓它起作用的唯一方法是在mainActivity中實現LocationListener,本地或無提示locationlistener都將無法工作。

例如

public class ActivityLogin extends AppCompatActivity implements LocationListener

也就是說,Google棄用了locationListener並將其替換為Google location API。 這將融合的LocationAPI與GoogleApiClient一起使用。

在您的onCreate中,您應該有類似

GoogleApiClient api_client;

 api_client = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();  

在您的onConnected方法中,您應該有類似

location = LocationServices.FusedLocationApi.getLastLocation(api_client);

我不認為這是一種改進,但是Google強迫我們這樣做。

暫無
暫無

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

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