Показать сложный тост из BroadcastReceiver
-
06-07-2019 - |
Вопрос
Интересно, кто-нибудь может мне помочь? Я пытаюсь отобразить элемент тоста при получении SMS. Этот тост должен содержать макет с изображением (значок SMS) и двумя текстовыми представлениями (отправитель, сообщение)
Если я вызываю следующий метод из действия, он работает как положено ...
public void showToast(Context context, String name, String message) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_sms,
(ViewGroup) findViewById(R.id.toast_sms_root));
TextView text = (TextView) layout.findViewById(R.id.toastsms_text);
text.setText(message);
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
Однако, если я пытаюсь вызвать тот же код тем же способом из моего SMSReceiver, я получаю:
The method getLayoutInflater() is undefined for the type SmsReceiver
The method findViewById(int) is undefined for the type SmsReceiver
The method getApplicationContext() is undefined for the type SmsReceiver
Может кто-нибудь, пожалуйста, посоветуйте, как я могу сделать это из намерения. Я полагаю, что проблема как-то связана с многопоточностью, однако я не уверен, что делать дальше. Я видел несколько примеров в Интернете, но они, похоже, либо используют устаревший код, либо отображают только простой текст
Может ли кто-нибудь указать мне правильное направление?
Большое спасибо
Решение
Вы можете использовать LayoutInflater.from (context), чтобы получить свой LayoutInflater. Вот так:
LayoutInflater mInflater = LayoutInflater.from(context);
View myView = mInflater.inflate(R.layout.customToast, null);
TextView sender = (TextView) myView.findViewById(R.id.sender);
TextView message = (TextView) myView.findViewById(R.id.message);
Другие советы
Ваши ошибки компиляции вызваны тем, что BroadcastReceiver
не наследуется от Context
. Используйте Context
, который передается в onReceive ()
(и избавьтесь от getApplicationContext ()
- просто используйте Context код> вы прошли).
Теперь это все еще может не работать, так как я не уверен, что вы можете поднять Toast
из BroadcastReceiver
в первую очередь , но это, по крайней мере, поможет вам избежать ошибок компиляции.
Тост можно создать и отобразить из действия или службы, а не из получателя широковещательной рассылки.