Android 在服务的任何用户配置文件中显示toast/通知

Android 在服务的任何用户配置文件中显示toast/通知,android,android-service,android-notifications,toast,android-toast,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

我正在学习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的调用失败:

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

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


无论当前用户配置文件如何,服务是否可以显示来自服务的toast消息?

您无法显示来自服务的toast消息。只有UI线程可以做与UI相关的事情,Toast也是UI。有关详细信息,请参阅

您可以尝试以下方法:

添加到您的服务中:

protected Handler mHandler = new Handler();
然后您需要发布
Runnable
以显示Toast:

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

您不能在服务台上敬酒。只有UI线程可以做与UI相关的事情,Toast也是UI。有关详细信息,请参阅

您可以尝试以下方法:

添加到您的服务中:

protected Handler mHandler = new Handler();
然后您需要发布
Runnable
以显示Toast:

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

你应该使用处理器或广播接收器来更新你的用户界面。谢谢@Piyush Gupta。我正在使用Handler(更新了问题以反映这一点)。这就是我如何能够显示来自第一个用户配置文件的祝酒词。它工作正常,但是当切换到第二个配置文件时,祝酒词不再出现。您应该使用Handler或广播接收器更新您的UI。谢谢@Piyush Gupta。我正在使用Handler(更新了问题以反映这一点)。这就是我如何能够显示来自第一个用户配置文件的祝酒词。它工作得很好,但是当切换到第二个配置文件时,祝酒词不再出现。谢谢Marcin,我正是这样做的,并更新了问题以澄清这一点。问题是,虽然这在启动应用程序的用户配置文件中起作用(会显示祝酒),但当切换到另一个配置文件时,祝酒会停止出现。这段代码可以修改以使祝酒词出现在个人资料中,还是有更好的方法?谢谢Marcin,我正是这样做的,并更新了问题以澄清这一点。问题是,虽然这在启动应用程序的用户配置文件中起作用(会显示祝酒),但当切换到另一个配置文件时,祝酒会停止出现。是否可以修改此代码以使祝酒词显示在配置文件中,或者是否有更好的方法?