Intereting Posts
Модуль Google map v2. Android-приложение не отображает карту внутри карты React native интегрируется с существующим сбоем приложения: «Невозможно найти переменную: __fbBatchedBridge» Как CountDownTimer обращается к пользовательскому интерфейсу внутри метода OnTick? Преобразование массива байтов NV21 в растровый читаемый формат Google Map API v2 не обновляет Карты после перезапуска приложения. Поддерживает ли ormlite поддержку наследования? Номер типа ввода, допустимый знак отрицательного или десятичного знака? Camera.getNumberOfCameras () не работает на Android 2.2 Как получить изменение Url из CustomTabsClient Синхронизированный метод Java Обновление и блокировка CountDownTimer Значение файла String для чтения эспрессо Каковы наилучшие методы разработки веб-сервисов для мобильных приложений (особенно Android)? Возможно ли подключить одно приложение для приложения facebook к двум приложениям Android? Android SignalR должен быть реализован как Service или IntentService?

Как получить доступ к элементу TextView в BroadcastReceiver

Я тестирую простой виджет в android и использую Alarms для регулярного обновления TextView. Проблема в том, что в классе BroadcastReceiver я не могу получить доступ к элементу TextView, который я хочу получить, когда истечет срок действия будильника. Класс называется правильно, потому что Toast, который я поставил, дает соответствующее сообщение. Следующий код из класса, где я настраиваю виджет и устанавливаю таймеры.

public void onCreate(Bundle bundle) { super.onCreate(bundle); Intent intent = getIntent(); Bundle extras = intent.getExtras(); if(extras != null){ mWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(WidgetConfigure.this); RemoteViews views = new RemoteViews(WidgetConfigure.this.getPackageName(), R.layout.widget_layout); views.setTextViewText(R.id.quote, "Widget Loaded From Activity"); appWidgetManager.updateAppWidget(mWidgetId, views); setTimer(); //set the timers... setResult();// set the result... } } 

Теперь я хочу обновить тот же TextView, когда BroadCastReceiver вызывается после истечения таймера. Я пробовал код, представленный в примере ExampleAppWidget, представленном в демонстрационных версиях android api, и это не работает. Как я могу установить требуемый текст?

Вы не можете напрямую изменить что-то в Activity из BroadcastReceiver. Потому что, когда вызывается широковещательный приемник, активность, возможно, не существует. Вы можете отправлять сообщения в действие (если это действие существует), или если действие не существует, вы можете запустить его и поместить некоторые флаги в Intent

Update: Вот уродливый способ:

 class YourActivity extends xxxx { private static YourActivity mInst; public static YOurActivity instance() { return mInst; } /// Do your task here. public void setViewText(xxxx) ; @Override public void onStart() { ... mInst = this; } @Override public void onStop() { ... mInst = null; } } 

И в вашем BroadcastReceiver:

  YOurActivity inst = YOurActivity.instance(); if(inst != null) { // your activity can be seen, and you can update it's context inst.setViewText... }