5

我可以使用 isProviderEnabled() 检查 GPS 是否打开。如果它没有打开,我正在启动意图,以便用户可以启用 GPS。最后,我再次检查用户是否启用了 GPS。如果用户没有启用 GPS 并出来,isProviderEnabled() 仍然返回 NULL。可能是什么问题 ?请指导我。

    String provider = LocationManager.GPS_PROVIDER;
    // Check if GPS is enabled
    boolean enabled = myLocationManager.isProviderEnabled(provider);

    if (!enabled) {
                    // GPS not enabled
        Log.d("", "Provider " + provider + " is not enabled");
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(intent);
                    // Consider the case when user does not enable GPS and come out. 
    } else {
        Log.d("", "Provider is enabled");

    }       

            // Re-check if user has enabled or not. (Note: case: user has not enabled GPS)
    enabled = myLocationManager.isProviderEnabled(provider);
    if(!enabled)
    {

        Log.d("","provider not enabled");
    }
            else
            {
                    // Control is coming here though user has not enabled GPS in settings
                    Log.d("","GPS is enabled");
            }

谢谢, Biplab

4

3 回答 3

8

使用此代码检查 GPS 启用,让我知道发生了什么,

private void CheckEnableGPS(){
    String provider = Settings.Secure.getString(getContentResolver(),
      Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
       if(!provider.equals("")){
           //GPS Enabled
        Toast.makeText(AndroidEnableGPS.this, "GPS Enabled: " + provider,
          Toast.LENGTH_LONG).show();
       }else{
        Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
           startActivity(intent);
       }   
   }
于 2012-04-12T05:12:12.187 回答
8

我在实际的物理设备上遇到过这个问题。

我在我的物理 Android 设备上使用模拟位置进行了一些测试,然后使用 GPS 切换回真实位置(代码中没有所有模拟位置)。此时,无论 GPS 是否停止,应用程序都将始终返回“true”(GPS 已激活),并且由于某种原因不再注册真实位置。

在这种情况下,重新启动物理设备解决了这个问题。

于 2014-05-31T21:19:44.937 回答
0

有同样的问题,isProviderEnabled()在设备上返回 true < lollipop

根据user370305的回答,我更新了我的方法如下:

private boolean isLocationEnabled() {

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

        String provider = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

        return !provider.equals("");

    } else {

        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        return gps || network;

    }

}
于 2017-09-26T07:42:20.903 回答