GpsStatus.Listener регистрируется только если GPS включен - PullRequest
3 голосов
/ 25 марта 2012

У меня есть виджет, который отображает текущее местоположение пользователя с помощью LocationManager. Я экономлю заряд батареи, отключив локальный диспетчер рассылки для обновления местоположения через системный диспетчер рассылки, который указывает, включен ли экран. В целях экономии заряда аккумулятора я пытаюсь реализовать GpsStatus.Listener, чтобы сообщить мне, включен ли gps или выключен, чтобы я мог использовать его в моем менеджере местоположения. Все работает отлично, если я загружаю виджет ТОЛЬКО ЕСЛИ GPS ВКЛ. GpsStatus.Listener не срабатывает, если виджет загружается, когда GPS выключен. Очевидно, что есть обходной путь (загрузка с включенным gps), но мне любопытно спросить, почему слушатель не работает, если gps выключен во время выполнения. Я использую OS 4.0.3, и мой манифест включает в себя точное местоположение. та.

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                     int[] appWidgetIds)
{
    // Get all ids
    thisWidget = new ComponentName(context, MyWidgetProvider.class);
    this.appWidgetManager = appWidgetManager;
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

    remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
    remoteViews.setTextViewText(R.id.update, "running......");
    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

    ServicesManager = new MyLocationManager(context);
    streetAddress = new CellAddress(context, ServicesManager);
    ServicesManager.lm.addGpsStatusListener(myGPSListener);

    filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    context.getApplicationContext().registerReceiver(mReceiver, filter);


    LocalBroadcastManager.getInstance(context).registerReceiver(receiveUpdatedLocation, 
            new IntentFilter("sendUpdatedLocation"));


    if (!(ServicesManager.isInternet()))
    {
        remoteViews.setTextViewText(R.id.update, "Address not available" + "\n\n" +
                                    "Check data connection....");
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }
    else
    {
        remoteViews.setTextViewText(R.id.update, streetAddress.address$);
        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
    }

    Log.d(TAG, "onUpdate");
}

GpsStatus.Listener myGPSListener = new GpsStatus.Listener() 
{

    public void onGpsStatusChanged(int event) 
    {
        if(event == GpsStatus.GPS_EVENT_STARTED)
        {
        Log.d(TAG, "GPS Started");  
        } else if(event == GpsStatus.GPS_EVENT_STOPPED) {
        Log.d(TAG, "GPS Stopped");
        }
    }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...