如何检查是否存在GPS传感器?

时间:2011-02-17 16:48:49

标签: android gps

我正在编写一种方法,如果存在并启用了GPS传感器,它将返回true,但如果没有或关闭则返回false。事实证明这很难......

hasSystemFeature("FEATURE_LOCATION_GPS")  // on PackageManager

返回false,表示设备是否具有GPS。因此,即使在具有一个的设备上,并且它已打开,它仍然返回false。对我来说似乎完全错了,但我看不出原因。

isProviderEnabled("gps")   // on LocationManager

返回true,即使在我这里没有GPS硬件的设备上也是如此。这似乎完全违反直觉。

我接受这些结果可能是因为我遗漏了某些东西,SDK不直观,或者甚至我正在测试的设备表现得很奇怪。

我错过了什么?

3 个答案:

答案 0 :(得分:14)

这应该有效。进行此调用时,logcat中是否有任何错误消息?

PackageManager pm = getPackageManager();
boolean hasGps = pm.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);

答案 1 :(得分:2)

如果设备没有GPS硬件,则以下情况属实:

locationManager.getProvider(LocationManager.GPS_PROVIDER) == null;

哪里

LocationManager locationManager = (LocationManager) AppCore.context().getSystemService(Context.LOCATION_SERVICE);

在我的情况下,即使设备没有GPS,* hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)*也会返回true。所以它不可靠。

答案 2 :(得分:1)

您的hasSystemFeature()可能总是返回false,因为FEATURE_LOCATION_GPS是对常量的引用,而不是字符串文字。我相信它指向的当前字符串文字实际上是“android.hardware.location.gps”。

我相信你要找的是这样的:

LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    //Ask the user to enable GPS
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Location Manager");
    builder.setMessage("Would you like to enable GPS?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //Launch settings, allowing user to make a change
            Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            startActivity(i);
        }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //No location service, no Activity
            finish();
        }
    });
    builder.create().show();
}

我添加了关于AlertDialog的额外信息,指出您可以直接将用户带到位置设置页面,让他们使用Settings.ACTION_LOCATION_SOURCE_SETTINGS意图操作启用GPS。

希望有所帮助!