【问题标题】:How to keep a socket connection alive in an Android home screen widget如何在 Android 主屏幕小部件中保持套接字连接处于活动状态
【发布时间】:2020-05-05 22:50:11
【问题描述】:

我有一个小部件:class SmartAppWidget : AppWidgetProvider() 在此类中我打开了一个蓝牙套接字连接,但它总是连接和断开连接,如何在主屏幕小部件中保持连接有效?任何建议都会很棒。谢谢。

它只是一个按钮,当你点击它时,它会通过蓝牙发送命令:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialKeyguardLayout="@layout/smart_app_widget"
    android:initialLayout="@layout/smart_app_widget"
    android:minWidth="60dp"
    android:minHeight="60dp"
    android:updatePeriodMillis="86400000"
    android:configure="co.za.chester.smartcontroller.DeviceListActivity"
    android:widgetCategory="home_screen"></appwidget-provider>

【问题讨论】:

    标签: android kotlin broadcastreceiver appwidgetprovider


    【解决方案1】:

    AppWidgetProvider 只是 BroadcastReceiver 的清单注册子类。按照设计,它不会保持活动状态 - 您的 AppWidgetProvider 实例只需要一次调用 onReceive()(然后从那里调用 onUpdate() 或其他)即可。

    如果您想尝试在没有前台活动的情况下保持蓝牙连接,请使用前台服务。

    【讨论】:

    • 我想继续接收系统广播 Intent.ACTION_TIME_TICK 来更新我的小部件。如何在状态栏中不显示通知图标的情况下使其保持活力?我在前台服务和后台服务或其他东西之间纠结。有什么建议?谢谢。 stackoverflow.com/questions/70032050/…
    • @Krahmal:“我想继续接收系统广播 Intent.ACTION_TIME_TICK 来更新我的小部件——谷歌和设备制造商不希望你这样做,因为用户抱怨应用程序会做这种事情过度消耗电池。“如何在状态栏中不显示通知图标的情况下保持其活力?” - 创建您自己的启动器应用程序,您的应用程序小部件实际上不是AppWidgetProvider,而是您的启动器的一个功能。
    • 谢谢。这是我从未想过的想法。我对启动器很陌生。您的意思是自定义启动器永远处于活动状态,因此其中的接收器永远不会被杀死?
    • @Krahmal:“你的意思是自定义启动器永远处于活动状态,因此其中的接收器永远不会被杀死?” - 不。但是,当它对用户可见时,它就可以保证处于活动状态,这对于曾经是一个应用小部件来说是最重要的。
    • 谢谢。我会试试这个。但是我仍然很困惑其他应用程序如何作为小部件稳定可靠地做到这一点。
    猜你喜欢
    • 2012-07-08
    • 2018-04-13
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多