首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Activity Transition API请求activity-transition-更新一次

Activity Transition API请求activity-transition-更新一次
EN

Stack Overflow用户
提问于 2019-06-27 08:18:57
回答 1查看 386关注 0票数 0

我正在尝试在我的应用程序的后台实现活动转换更新。我的目标是请求一次活动转换更新,并在后台一直获取活动转换更新。为了实现这一点,我实现了以下内容:

代码语言:javascript
复制
PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext, 100, intent,
                PendingIntent.FLAG_NO_CREATE);
        if (pi == null) {
            pi = PendingIntent.getBroadcast(mApplicationContext, 100,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
            Task<Void> task = ActivityRecognition.getClient(mApplicationContext)
                    .requestActivityTransitionUpdates(atr, pi);
            task.addOnCompleteListener(task1 -> {
                if (task1.isSuccessful()) {
                    Log.v(TAG, "Travel behavior activity-transition-update set up");
                } else {
                    Log.v(TAG, "Travel behavior activity-transition-update failed set up: " +
                            task1.getException().getMessage());
                    task1.getException().printStackTrace();
                }
            });
        }

因此,在这段代码中,如果PendingIntent.getBroadcast(mApplicationContext, 100, intent,PendingIntent.FLAG_NO_CREATE);返回null,我将调用requestActivityTransitionUpdates方法。否则,我不会请求,因为活动转换更新已经使用挂起的意图进行了请求。

但是,此代码不起作用。在第一个requestActivityTransitionUpdates之后,PendingIntent.getBroadcast(mApplicationContext, 100, intent, PendingIntent.FLAG_NO_CREATE)返回一个挂起的意图,并且我不调用requestActivityTransitionUpdates并且停止获取转换更新。

如果我通过删除PendingIntent.getBroadcast(mApplicationContext, 100, intent, PendingIntent.FLAG_NO_CREATE)行来使用以下代码:

代码语言:javascript
复制
PendingIntent pi = PendingIntent.getBroadcast(mApplicationContext, 100,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);
            Task<Void> task = ActivityRecognition.getClient(mApplicationContext)
                    .requestActivityTransitionUpdates(atr, pi);
            task.addOnCompleteListener(task1 -> {
                if (task1.isSuccessful()) {
                    Log.v(TAG, "Travel behavior activity-transition-update set up");
                } else {
                    Log.v(TAG, "Travel behavior activity-transition-update failed set up: " +
                            task1.getException().getMessage());
                    task1.getException().printStackTrace();
                }
            });

我一直在获取最新的过渡。但在这种情况下,每次打开应用程序时,我都必须请求转换更新。在每次转换更新请求之后,即使没有发生实际的活动转换,API也会返回我的BroadcastReceiver类中的当前活动。

那么,有没有一种方法可以只请求一次转换更新,并一直获取转换更新?

EN

回答 1

Stack Overflow用户

发布于 2019-07-25 14:22:47

您可以使用第二种方法。

但正如您所说,广播接收器将在每次应用程序运行时收到通知,因为转换API将返回最后检测到的活动。

您可以获取该事件时间,如果它是旧的事件时间,或者如果它是重复的,则可以通过将最后接收到的事件时间保存在某个位置(如db或共享首选项)来忽略它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56782430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档