Android 在服务的任何用户配置文件中显示toast/通知
我正在学习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
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,我正是这样做的,并更新了问题以澄清这一点。问题是,虽然这在启动应用程序的用户配置文件中起作用(会显示祝酒),但当切换到另一个配置文件时,祝酒会停止出现。是否可以修改此代码以使祝酒词显示在配置文件中,或者是否有更好的方法?