在服务

时间:2016-04-20 07:37:38

标签: android android-service android-notifications toast android-toast

我正在学习针对多配置文件场景的Android应用程序开发,并创建了一个简单的服务,每隔几秒钟显示一次Toast消息。该服务调用startForeground

正如预期的那样,会显示Toast消息并在通知栏中显示通知(startForeground所需)。

更新:使用处理程序显示toast,遵循答案中建议的相同方法:

Handler handler =new Handler();
handler.post(new Runnable() {
public void run() {
   Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show()
}

});

但是,登录其他用户个人资料时:

  • 通知栏中不再显示通知,
  • 不再出现祝酒词。

我知道该服务仍在运行,因为它继续输出日志消息(adb logcat),并且没有任何错误消息表明此调用显示吐司失败:

我尝试在登录新用户配置文件后以编程方式停止并重新启动服务,但没有运气。如果在新用户配置文件中手动重新启动应用程序,则会出现祝酒词和通知

这不是系统应用程序,因此解决方案需要授予系统应用程序的权限是不可接受的。

服务是否可以显示来自服务的Toast消息,而不管当前的用户配置文件是什么?

1 个答案:

答案 0 :(得分:0)

您无法通过服务显示Toast。只有UI线程可以做UI相关的事情,而Toast也是UI。有关详细信息,请参阅Communicating with the UI Thread

您可以尝试这种方法:

添加到您的服务:

protected Handler mHandler = new Handler();

然后您需要发布Runnable以显示Toast:

mHandler.post(new Runnable() {
    public void run() {
       Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show()
    }
});