Android:检测用户是否打开状态栏

时间:2011-10-06 20:31:08

标签: android gps detect statusbar

我正在编写一个使用GPS进行本地化服务的应用。当用户尝试使用已禁用GPS的应用程序时,会弹出一个对话框。现在,用户可以最小化应用程序并更改GPS设置。当他重新打开应用程序时,它会在onResume()中检测到设置已更改并关闭对话框。 这工作正常,但用户有第二种方式启用GPS:状态栏。当状态栏打开和关闭时,onResume()和onWindowFocusChanged()都不会被调用,因此我不会检测用户何时启用GPS。

有没有办法检测状态栏的打开?

我可以通过LocationListener来实现,但我想按照上面的描述进行操作。

提前致谢!


我在android-dev IRC找到了帮助。现在,我正在使用观察者来注意设置here之类的更改。因此,我检测所有设置更改,即使它们是通过通知栏完成的,也不会从LocationManager请求更新。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

要使用状态栏收听用户已启用的GPS,您可以通过位置管理器设置监听器以进行更改:

private class DisabledGPSListener implements LocationListener{

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        locationManager.removeUpdates(this);
        locationManager.addGpsStatusListener(gpsStatusListener);
    }

将此侦听器设置在onCreate()

if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
    locationManager.addGpsStatusListener(gpsStatusListener);
}else{
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0, new DisabledGPSListener());
}

其中gpsStatusListener是以下实例:

    private class GPSStatuslistener implements GpsStatus.Listener {

    @Override
    public void onGpsStatusChanged(int event) {
        switch (event) {
        case GpsStatus.GPS_EVENT_STARTED:
            Log.d(TAG, "ongpsstatus changed started");
            //TODO: your code that get location updates, e.g. set active location listener 
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            Log.d(TAG, "ongpsstatus changed stopped");
            createGpsDisabledAlert();
        }
    }

答案 1 :(得分:0)

您正在寻找的是LocationManager.addGpsStatusListener吗?

答案 2 :(得分:0)

这并不能直接解决您的问题,但您可能会发现更容易为用户打开设置:

startActivityForResult(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS), 0);