Вопрос

Интересно, кто-нибудь может мне помочь? Я пытаюсь отобразить элемент тоста при получении 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 в первую очередь , но это, по крайней мере, поможет вам избежать ошибок компиляции.

Тост можно создать и отобразить из действия или службы, а не из получателя широковещательной рассылки.

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