Pergunta

Gostaria de saber se alguém pode me ajudar. Eu estou tentando exibir um elemento de brinde quando um SMS é recebido. Este brinde deve conter um layout que tem uma imagem (SMS Ícone) e 2 TextViews (remetente, mensagem)

Se eu chamar o seguinte método de uma atividade, ele funciona como esperado ...

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();
}

No entanto, se eu tentar chamar o mesmo código da mesma forma do meu SMSReceiver, eu recebo:

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

Por favor alguém pode aconselhar como eu posso fazer tihs de uma intenção. Presumo que o problema é de alguma forma relacionados com a cruz-threading no entanto, não estou certo de como proceder. Eu vi um par de exemplos on-line, mas eles parecem tanto código obsoleto uso ou exibir somente texto simples

Alguém por favor pode me apontar na direção correta

Muitos agradecimentos

Foi útil?

Solução

Você pode usar LayoutInflater.from (contexto) para obter seu LayoutInflater. Como esta:

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);

Outras dicas

Seus erros de compilação são por causa BroadcastReceiver não herda de Context. Use o Context que penetrou onReceive() (e se livrar de getApplicationContext() - basta usar o Context você são passados).

Agora, isto pode ainda não trabalho, como eu não tenho certeza se você pode levantar uma Toast de um BroadcastReceiver em primeiro lugar, mas esta vontade, pelo menos, começar após os erros de compilação.

Um brinde pode ser criada e exibida a partir de uma actividade ou serviço, não Transmissão receptor

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top