У меня есть виджет, который отображает текущее местоположение пользователя с помощью 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");
}
}
};