Android: получение пользовательской трансляции при нажатии кнопки в виджете - PullRequest
1 голос
/ 12 августа 2010

У меня есть BroadcastReceiver, который отлично работает, то есть, выполняя этот код из Activity, получатель получает намерение:

Intent toggleIntent = new Intent(this, ToggleServicesReceiver.class);
this.sendBroadcast(toggleIntent);

Но я пытаюсь сделать то же самое с помощью кнопки в виджете:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {  
    ...
    Intent toggleIntent = new Intent(context, ToggleServicesReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteView.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
}

Код вызывается (я проверял его с помощью отладчика), но когда пользователь нажимает кнопку, тот же BroadcastReceiver не получает Intent.

Что может происходить?

Редактировать : BroadcastReceiver определен в AndroidManifest.xml, и теперь я не уверен, нужен ли <intent-filter>:

<receiver android:name="foo.receivers.ToggleServicesReceiver">
    <intent-filter>
        <action android:name="foo.intent.action.SERVICES_TOGGLE" />
    </intent-filter>
</receiver>

Редактировать : Я также нашел это на форуме, это может быть связано с этой проблемой

Вы просто не можете этого сделать. Только компонент BroadcastReceiver «живет» во время разговора onReceiveIntent (); это не разрешено использовать в нем registerReceiver, потому что к тому времени, когда вы вернетесь из этот метод (в какой момент вы могли бы сначала получить что-нибудь от вашего зарегистрироваться), компонента больше нет живой, и система может убить в в любое время вернуть память.

1 Ответ

0 голосов
/ 22 августа 2010

Учтите это:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);
...