【问题标题】:Detect when application is put into recents检测何时将应用程序放入最近
【发布时间】:2021-04-03 06:31:23
【问题描述】:

在 Tizen Wearable 上,有一个通用应用的流程:

  1. 应用程序由用户启动
  2. 屏幕关闭(用户无活动超时),onPause 调用
  3. 应用程序被放入最近(当屏幕重新打开时,应用程序不再可见)

但是还有另一种情况:

  1. 应用程序由用户启动
  2. 屏幕关闭(用户无活动超时),onPause 调用
  3. 屏幕重新打开(来自用户的活动):应用程序仍然可见,onResume 已调用。

是否有可能以某种方式检测/知道我的应用程序在屏幕重新打开后是否不可见?

onPause 不可靠,因为它在屏幕关闭后立即调用。我是否可以注册任何其他信号/事件来检测我的应用程序是否真的被放入 kindof 后台(最近列表)?

【问题讨论】:

    标签: tizen tizen-native-app


    【解决方案1】:

    您能否解释一下“应用程序被放入最近的应用程序(当屏幕重新打开时,应用程序不再可见)”是什么?

    据我所知,在屏幕关闭后 20 秒后,主屏幕应用程序将位于可穿戴设备的窗口堆栈顶部。 我认为这与此有关。如果不是,请详细描述场景。

    并且,如果您想监听显示状态的事件,请查看以下 API 参考: https://samsung.github.io/TizenFX/latest/api/Tizen.System.Display.html https://docs.tizen.org/application/native/api/wearable/5.5/group__CAPI__SYSTEM__DEVICE__DISPLAY__MODULE.html

    屏幕打开后,如果您的应用程序存在于窗口堆栈的顶部,它将可见。

    【讨论】:

    • “放入最近”有点误导 - 抱歉。我正在寻找的似乎不可用。因为我只想在我的应用程序将不可见屏幕重新打开时收到通知。我的应用程序需要用户注意,当屏幕超时时我想退出。但是,如果屏幕关闭,而我的应用程序仍在顶部(20 分钟或 1 小时 - 可通过手表上的设置进行配置),我不想退出。
    • 不幸的是,“如果屏幕重新打开,一旦我的应用程序将不可见,就会收到通知”太难了。检查屏幕状态暗淡如何?据我所知,当屏幕超时时,屏幕将处于昏暗状态。然后,它将进入关闭状态。我认为您可以使用它来处理它。(在这种情况下,您的应用程序将在屏幕关闭时进入暂停状态。您可以处理这种情况使用设备 API 并在需要时检查应用程序状态。)
    • 是的,我可以处理,但如果屏幕没有重新打开,我将不会收到任何事件:/
    • 当屏幕关闭时,应用程序将暂停。应用程序并不直接知道窗口堆栈信息。
    • 我目前在 onPause 中添加了一个计时器(以防显示关闭),并在 onResume 中取消它。这可行,但“显示最后一个应用程序”是一个可配置的设置,我无法检索它(缺乏文档)。你可能知道答案:stackoverflow.com/questions/66963899/…
    【解决方案2】:

    当您的应用程序如下所示时,您可以获得显示更改事件(例如 LCD On/Off)。

    static void _display_state_change_cb(void *data, Evas_Object *o, void *ev_info)
    {
        Evas_Object *win = (Evas_Object*) data;
        Elm_Win_Aux_Message *msg = ev_info;
        const char *key, *val;
    
        key = elm_win_aux_msg_key_get(win, msg);
        val = elm_win_aux_msg_val_get(win, msg);
        if (!strcmp(key, "dpms_wm"))
        {
            if (!strcmp(val, "off"))
            {
                /* Display Off. Do Something */
            }
        }
    }
    
    ...
    evas_object_smart_callback_add(win, "aux,msg,received", _display_state_change_cb, win);
    

    仅供参考,如果您的应用程序窗口不可见,则不会收到此消息。

    【讨论】:

    • 感谢您的贡献!这并没有真正的帮助,因为我想知道我的应用程序在下次屏幕打开后何时不可见(onResumeD)。但是,我做了一个需要一点点的解决方法,如果您也可以检查该问题,我将不胜感激:stackoverflow.com/questions/66963899/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多