使用服务显示吐司
Using service to show up toasts
我正在忙于一个新的应用程序。但是我创建了一个调用这样的方法的服务:
MessageProcessor mp = new MessageProcessing(MessageService.this);
wa.setNewMessageBind(mp);
但是,由于它是添加到服务中而不是 Activity,因此出现此错误:
nl.giovanniterlingen.whatsapp.MessageService cannot be cast to android.app.Activity
是的,我在互联网上搜索了很多,但仍然找不到适合我需要的答案。这是 MessageProcessing 源代码:
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(
context,
msg.getFrom() + "(" + msg.getGroupId() + "): "
+ msg.getText(), Toast.LENGTH_SHORT)
.show();
}
});
当我像这样用 system.out
替换 toast 时:
System.out.println(msg.getFrom() + "(" + msg.getGroupId()
+ "): " + msg.getText());
然后它工作正常,但我想要吐司所以这就是我问的原因。
要获得更清晰的视图,请参阅我的 Github 和 2015 年 9 月 7 日的最新提交
private Toast myToast;
// 声明为字段
myToast = Toast.makeText(this, "DummyMessage", Toast.LENGTH_LONG);
// 在 onCreate(Bundle b)
myToast.setText("yourActualMessage"); // set msg Inside service or whatever
myToast.show(); // Display in service or anywhere you want
您不能将扩展 Service 的 MessageService 转换为 Activity。
您需要从服务访问您的 UiThread。检查这个问题,也许它会帮助你:Accessing UI thread handler from a service
Handler handler = new Handler(Looper.getMainLooper());
handler.post(something_to_run_on_main_thread);
您可以使用
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Your msg here" + msg.getText(), Toast.LENGTH_LONG);
}
});
我正在忙于一个新的应用程序。但是我创建了一个调用这样的方法的服务:
MessageProcessor mp = new MessageProcessing(MessageService.this);
wa.setNewMessageBind(mp);
但是,由于它是添加到服务中而不是 Activity,因此出现此错误:
nl.giovanniterlingen.whatsapp.MessageService cannot be cast to android.app.Activity
是的,我在互联网上搜索了很多,但仍然找不到适合我需要的答案。这是 MessageProcessing 源代码:
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(
context,
msg.getFrom() + "(" + msg.getGroupId() + "): "
+ msg.getText(), Toast.LENGTH_SHORT)
.show();
}
});
当我像这样用 system.out
替换 toast 时:
System.out.println(msg.getFrom() + "(" + msg.getGroupId()
+ "): " + msg.getText());
然后它工作正常,但我想要吐司所以这就是我问的原因。
要获得更清晰的视图,请参阅我的 Github 和 2015 年 9 月 7 日的最新提交
private Toast myToast;
// 声明为字段
myToast = Toast.makeText(this, "DummyMessage", Toast.LENGTH_LONG);
// 在 onCreate(Bundle b)
myToast.setText("yourActualMessage"); // set msg Inside service or whatever
myToast.show(); // Display in service or anywhere you want
您不能将扩展 Service 的 MessageService 转换为 Activity。
您需要从服务访问您的 UiThread。检查这个问题,也许它会帮助你:Accessing UI thread handler from a service
Handler handler = new Handler(Looper.getMainLooper());
handler.post(something_to_run_on_main_thread);
您可以使用
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Your msg here" + msg.getText(), Toast.LENGTH_LONG);
}
});