在我的应用程序中,我需要监控 GPS 状态,应用程序只能在 GPS 开启的情况下运行,如果用户关闭 GPS,我会显示“位置和安全”设置。我已经为 GPS 监控实现了自定义类:
public class GPSManager {
LocationManager mLocationManager;
StatusListener statusListener;
/**
* @param Context context - context to get LocationManager service
* @param IGpsStatusClient client -component, which wants to receive GPS status update
*/
public GPSManager(Context context, IGpsStatusClient client) {
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
statusListener=new StatusListener(client);
}
public boolean isGpsEnabled(){
return mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
public void registerUpdates() {
mLocationManager.addGpsStatusListener(statusListener);
}
public void unregisterUpdates() {
mLocationManager.removeGpsStatusListener(statusListener);
}
class StatusListener implements GpsStatus.Listener {
IGpsStatusClient client;
public StatusListener(IGpsStatusClient client){
this.client=client;
}
public void onGpsStatusChanged(int event) {
if(event==GpsStatus.GPS_EVENT_STOPPED){
client.promptGpsSettings();
}
}
}
}
这里的客户端是一个 Fragment 类实例。它使用一种方法(我在其中显示位置设置)实现了 IGpsStatusClient 接口。我在其中注册更新onResume()
并在其中取消注册onPause()
但这没有效果。当我展开通知栏并关闭 GPS 然后返回应用程序时,没有显示任何提示。据我了解,GPS 状态通知不像“待定意图”,它会挂起一段时间,以便所有接收器都可以处理它。有什么选择?据我了解,GPS 只能由用户关闭,而不是在我的活动可见时关闭。所以,我只应该在 Activity(或 Fragment)生命周期事件中检查 GPS 状态。但是当通知栏展开时,我没有收到 onResume() 或 onPause() 调用(但是为什么我没有收到 GPS 状态通知?)我在考虑服务,但认为这对我的问题来说很昂贵。有什么帮助吗?谢谢。