安卓 - 是否有一种方法可以监听GPS是否已启用或已禁用

3

我写了这段代码以接收位置更新 -

PendingIntent launchIntent = PendingIntent.getBroadcast(context, 5000, intent, 0);
manager.requestLocationUpdates(selectProvider(), 0, 0, launchIntent);

如果可用,我会选择GPS提供者,否则选择网络提供者。如果后来启用了GPS提供者,是否有办法切换回去?

当GPS提供者启用或禁用时,系统是否会广播意图?我能否设置监听器来获取相同的信息?


虽然我不是安卓开发者,但我知道这是可能的——我使用的 WiFi 监控应用(Kostya Vasilyev 的 WiFi Manager)可以检测到 WiFi 是否启用,并与 WiFi 开/关状态同步更新其小部件。各种 GPS 应用程序也可以检测到 GPS 是否启用/禁用。 - Marc B
可能是重复的问题:如何查找Android设备的GPS是否已启用 - Matt Ball
1
不是重复问题 - 其他问题寻求一次性检查(并激活,这已不再可能),而此问题想要监听状态更改。 - Richard Le Mesurier
2个回答

7

您可以检测GPS状态的变化,例如是否已获取GPS卫星定位。

请查看GpsStatus.Listener。使用locationManager.addGpsStatusListener(gpsStatusListener)进行注册。


1
现在这个已经被弃用了,应该使用GnssStatus - Wahib Ul Haq
@WahibUlHaq,你能提供一个如何使用GnssStatus的例子吗?因为我还没有找到任何关于如何监听GPS状态启用/禁用的最佳实践。 - Yarin Shitrit

5
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String provider) {
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_LONG).show();

}

public void onProviderDisabled(String provider) {
    Toast.makeText(this, "GPS disconnected", Toast.LENGTH_LONG);
        Toast.makeText(getApplicationContext(), "Connected",
                Toast.LENGTH_LONG);


    Toast.makeText(this, "Please Switch on GPS." + provider,
            Toast.LENGTH_LONG).show();
}

5
这段代码是什么?它实现了哪个接口(是哪个接口)?如何使用它(例如应在哪里传递它)? - Luten
我同意@luten的观点,不清楚你在回答什么。 - Recaldev
各位,这个问题在2011年就已经得到了回答,现在一定有许多新的高效方法来处理这种情况。 - Awais Tariq
对于那些仍然对接口一无所知的人,它是指 LocationListener - Wahib Ul Haq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接