BroadcastReceiver не получает намерение
-
19-09-2019 - |
Вопрос
Итак, теперь мой BroadcastReceiver объявлен в файле манифеста...
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON" />
</intent-filter>
</receiver>
Я хочу уловить намерение при нажатии кнопки «Вызов».
Вот мой код...
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "intent received", Toast.LENGTH_LONG);
if(intent.getAction().equals("android.intent.action.CALL_BUTTON")) {
Toast.makeText(context, "call button pressed", Toast.LENGTH_LONG);
}
}
}
Однако я не вижу тоста, когда нажимаю кнопку вызова.Я что-то пропустил?
Это продолжение с использованием ответа на этот вопрос...
Как использовать намерения из службы или широковещательного приемника?
Решение
Короткий ответ: вы не можете делать то, что пытаетесь сделать.
Действие «ACTION_CALL_BUTTON» — это «действие начала действия», а не «действие широковещания».Его можно использовать в намерении, используемом в startActivity
для запуска Activity, которое должно реагировать на нажатие кнопки вызова.Что вы хотите, так это получать уведомление при нажатии кнопки вызова, и система не передает намерение объявить об этом.
Альтернативно, вы можете включить тот же intent-filter
в действии, чтобы пользователь мог выбрать его при нажатии кнопки вызова.
Что вы надеетесь сделать, когда пользователь нажмет кнопку вызова?
Другие советы
Согласно документам, ACTION_CALL_BUTTON
не является трансляционной акцией;скорее, это деятельностное действие.
Видеть Сообщение от Дианы об этом в другой теме.