GPS isProviderEnabled 总是返回 false

Posted

技术标签:

【中文标题】GPS isProviderEnabled 总是返回 false【英文标题】:GPS isProviderEnabled always return 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”。在这种情况下,每次都会出现弹出窗口

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

感谢您的帮助。

【问题讨论】:

【参考方案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。添加上面的行来解决问题。

【讨论】:

以上是关于GPS isProviderEnabled 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

Android:isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不起作用。只有 isProviderEnabled(LocationManage

locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 使用 Wi-Fi 总是返回 false

Android google maps v2 isproviderEnabled(LocationManager.NETWORK_PROVIDER,0,0,this) 总是返回 false

使用对话框启用 GPS

禁用 GPS 的位置更新

.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为真