Вопрос

Итак, теперь мой 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 не является трансляционной акцией;скорее, это деятельностное действие.

Видеть Сообщение от Дианы об этом в другой теме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top