GPS未启用,但isProviderEnabled()返回true

时间:2012-04-12 04:57:50

标签: android

我可以使用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

3 个答案:

答案 0 :(得分: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);
       }   
   }

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:0)

isProviderEnabled()在设备上返回true的同一问题<棒棒糖

根据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;

    }

}