Mostrar Toast Complexo De BroadcastReceiver
-
06-07-2019 - |
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 ??p>
Muitos agradecimentos
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