【问题标题】:How to create a Notification or Toast from startup service?如何从启动服务创建通知或 Toast?
【发布时间】:2018-12-11 04:42:31
【问题描述】:

我正在开发一个基本的提醒应用程序,它具有能够将用户设置的日期记录到 sqlite 数据库的用户界面。为了完成我的应用程序,我希望有一个服务在手机重新启动时启动并在后台继续运行,因此我可以定期检查数据库并在任何日期接近时向用户显示通知消息。

我可以在启动时启动我的服务(我可以向 Android Studio 发送 LOG 消息),但我无法显示通知。似乎我发现的示例总是依赖于一个活动,但是如果没有运行主应用程序,我怎么会有一个活动呢? (当然这就是我的后台服务的重点,用户不必打开主应用程序)。

Q1:如何显示来自此服务的 Toast 消息?

Q2:如何显示来自此服务的通知?

public class autostartservice extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            for (int i = 0; i < 40; i++) {
                synchronized (this) {
                    try {
                        wait(1000);
                    } catch (Exception e) {}
                    Log.i("myDebug", "Just wait here couple second until the phone boots all the way");
                }
            }
            Toast.makeText(context, "Look at this Toast! Cool uh?", Toast.LENGTH_SHORT).show();
        }
    }
}

【问题讨论】:

    标签: java android service


    【解决方案1】:

    所有这些事情都使用上下文来显示 Toast 或 Notification。服务“充当”上下文,因此您可以执行与在 Activity 中执行的操作完全相同的操作。您只需要注意普通服务在用户界面的同一线程中运行,因此如果服务正在阻塞(以阻塞方式等待某些事件),即使用户界面被阻塞,并且在阻塞/冻结时无法显示通知或 Toast .

    【讨论】:

    • 好的,那么我需要做些什么不同的事情来显示 Toast / Notification?
    • 通过使用“runOnUiThread()”方法或通过在 MainThread 处理程序上发布消息来发布可运行/代码。我认为您必须在使用前阅读一些关于它们的指南。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2023-03-25
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多