【问题标题】:GPS isProviderEnabled always return falseGPS isProviderEnabled 总是返回 false
【发布时间】:2014-03-03 05:30:58
【问题描述】:

我有这个代码

 lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
 boolean isGPS = lm.isProviderEnabled (LocationManager.GPS_PROVIDER);

并且它总是返回 false,即使启用了 GPS。 GPS 工作正常,但我使用此布尔值显示弹出“未启用 GPS”。在这种情况下,每次都会出现弹出窗口

  1. 我检查了类似的问题,但没有帮助。
  2. 是的,我的清单中有权限
  3. 我在 onResume 方法中使用了这段代码

感谢您的帮助。

【问题讨论】:

    标签: android gps return provider


    【解决方案1】:

    如果您正在检查位置是否打开,无论它是否使用 GPS,所以您必须注意以下内容,因为它是我的情况,在设备位置设置中 定位方法 设置为 BatterySaving 模式,在该模式下设备仅使用 WiFi 移动网络来估计位置:

    因此,GPS 甚至不用于更新位置,因此位置图标不会出现在状态栏中,除了位置提供者将声明为 Network 而不是 GPS

    因此,要解决该问题,您必须检查提供程序是否包含 gps 或包含 network

    private boolean checkIfLocationOpened() {
        String provider = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        if (provider.contains("gps") || provider.contains("network"))
            return true;
        }
        // otherwise return false
        return false;
    }
    

    如果你想使用LocationManager

    private boolean checkIfLocationOpened() {
        final LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
            return true;
        }
        // otherwise return false
        return false;
    }
    

    【讨论】:

    • @MuhammedRefaat 但是当 GPS 关闭时,manager.isProviderEnabled(LocationManager.GPS_PROVIDER)manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 仍然返回 false!我已经在 Android API 28 上对其进行了测试。
    • @Dr.jacky 如果位置设置已设置为“高精度”并且 GPS 已关闭,它将偏离轨道返回,您确定这不是您的情况吗?
    • @MuhammedRefaat 但在提示中,它说:“使用 GPS、Wi-Fi 和移动网络来估计您的位置”。因此,如果 GPS 关闭,它可以从网络获取位置! -> i.stack.imgur.com/fKr3H.png
    • @Dr.jacky 是的,你是对的,所以它应该使用网络,让我从我这边检查一下,如果我能找到什么东西会告诉你
    • @Gerrard 我的荣幸
    【解决方案2】:

    试试这个方法..

    private void turnGPSOn(){   
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);   
    if(!provider.contains("gps")){      
        final Intent poke = new Intent();  
        poke.setClassName("com.android.settings","com.android.settings.widget.SettingsAppWidgetProvider");           
        poke.addCategory(Intent.CATEGORY_ALTERNATIVE);   
        poke.setData(Uri.parse("3"));      
        sendBroadcast(poke);  
        } 
    }  
    

    【讨论】:

    • 我使用了你的一部分代码。这个'if'返回真值
    • 他们是否有任何理由使用 Settings.Secure 会返回比 LocationManager.isProviderEnabled 更好的结果?我问是因为似乎在某些设备上 isProvderEnabled 无法按预期工作......
    • 在 GPS 打开的情况下,我的提供者值是网络,而且现在不推荐使用 LOCATION_PROVIDERS_ALLOWED。还有其他解决方案吗?
    【解决方案3】:

    有时位置管理器返回错误的结果。下面的代码对我有用。

    public static boolean isGpsEnabled(Context context) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                String providers = Settings.Secure.getString(context.getContentResolver(),
                        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
                if (TextUtils.isEmpty(providers)) {
                    return false;
                }
                return providers.contains(LocationManager.GPS_PROVIDER);
            } else {
                final int locationMode;
                try {
                    locationMode = Settings.Secure.getInt(context.getContentResolver(),
                            Settings.Secure.LOCATION_MODE);
                } catch (Settings.SettingNotFoundException e) {
                    e.printStackTrace();
                    return false;
                }
                switch (locationMode) {
    
                    case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
                    case Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
                        return true;
                    case Settings.Secure.LOCATION_MODE_BATTERY_SAVING:
                    case Settings.Secure.LOCATION_MODE_OFF:
                    default:
                        return false;
                }
            }
        }
    

    【讨论】:

      【解决方案4】:

      试试这个 GPS 示例代码。希望对您有所帮助。

      GPS Location

      【讨论】:

        【解决方案5】:

        有时你必须重启你的设备,可能gps-status返回失败。

        【讨论】:

          【解决方案6】:

          要修复 GPS isProviderEnabled 在 Android 6 上始终返回 false,请将其添加到您的清单中:

          <uses-feature android:name="android.hardware.location.gps" />
          

          Titanium 在 android 5.0 及更高版本上找不到 GPS 硬件,因此它一直返回 false。添加上面的行来解决问题。

          【讨论】:

            猜你喜欢
            • 2021-03-04
            • 1970-01-01
            • 2012-04-26
            • 2014-01-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-20
            相关资源
            最近更新 更多