当前位置: 首页 > 编程笔记 >

Android 使用Fence API获取用户活动的更改

孔华池
2023-03-14
本文向大家介绍Android 使用Fence API获取用户活动的更改,包括了Android 使用Fence API获取用户活动的更改的使用技巧和注意事项,需要的朋友参考一下

示例

如果要检测用户何时开始或完成活动(例如步行,跑步或该DetectedActivityFence课程的其他任何活动),则可以为要检测的活动创建围栏,并在用户开始/结束时得到通知这项活动。通过使用BroadcastReceiver,您将获得Intent包含活动的数据:

// 您自己的动作过滤器,如清单中使用的过滤器。
private static final String FENCE_RECEIVER_ACTION =BuildConfig.APPLICATION_ID+
    "FENCE_RECEIVER_ACTION";
private static final String FENCE_KEY = "walkingFenceKey";
private FenceReceiver mFenceReceiver;
private PendingIntent mPendingIntent;

// 确保按照“备注”部分所述初始化客户端。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 等等

    // 0是标准的活动请求代码,可以根据需要进行更改。
    mPendingIntent = PendingIntent.getBroadcast(this, 0, 
        new Intent(FENCE_RECEIVER_ACTION), 0);
    registerReceiver(mFenceReceiver, new IntentFilter(FENCE_RECEIVER_ACTION));

    // 创建围栏。
    AwarenessFence fence = DetectedActivityFence.during(DetectedActivityFence.WALKING);
    // 注册篱笆以接收回调。
    Awareness.FenceApi.updateFences(client, new FenceUpdateRequest.Builder()
        .addFence(FENCE_KEY, fence, mPendingIntent)
        .build())
        .setResultCallback(new ResultCallback<Status>() {
            @Override
            public void onResult(@NonNull Status status) {
                if (status.isSuccess()) {
                    Log.i(FENCE_KEY, "成功注册。");
                } else {
                    Log.e(FENCE_KEY, "无法注册: " + status);
                }
            }
        });
    }
}

现在,BroadcastReceiver当用户更改活动时,您可以收到带有的意图以获取回调:

public class FenceReceiver extends BroadcastReceiver {

    private static final String TAG = "FenceReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取围栏状态
        FenceState fenceState = FenceState.extract(intent);

        switch (fenceState.getCurrentState()) {
            case FenceState.TRUE:
                Log.i(TAG, "User is walking");
                break;
            case FenceState.FALSE:
                Log.i(TAG, "User is not walking");
                break;
            case FenceState.UNKNOWN:
                Log.i(TAG, "User is doing something unknown");
                break;
        }
    }
}
           

 类似资料:
  • 问题内容: 在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作以获取UserDetails实现: 它工作正常,但我认为Spring在这种情况下可以使生活更轻松。有没有办法将自动接线连接到控制器或方法中? 例如,类似: 但是我得到了,而不是得到了? 我正在寻找一种优雅的解决方案。有任何想法吗? 问题答案: 序言:从Spring-Security 3.2开始,此答案的末尾描述了一个不错的注

  • 问题内容: 在我的控制器中,当我需要活动(登录)用户时,我正在执行以下操作以获取UserDetails实现: 它工作正常,但我认为Spring在这种情况下可以使生活更轻松。有没有办法将UserDetails自动接线连接到控制器或方法中? 例如,类似: 但是我得到了,而不是得到了? 我正在寻找一种优雅的解决方案。有任何想法吗? 问题答案: 序言:从Spring-Security 3.2开始@Auth

  • 目前,我正在使用电子邮件确认的用户注册表单。 我已经设法启动我的应用程序使用链接在电子邮件,但我不知道如何获得链接的用户点击启动我的应用程序。

  • 问题内容: 情况如下: 在线程中触发事件。 需要检索当前活动。 然后在该活动上创建一个对话框并显示。 问题:据我搜索,还没有办法在前台检索当前活动。 额外信息:这需要能够在多个活动中进行处理。因此,它可以在活动A或B或C中弹出。 问题答案: 我不确定这是否是您要寻找的东西,但这似乎很简单。http://iamvijayakumar.blogspot.com/2011/09/get- current

  • 我正在使用Room从表中加载数据,并在android应用程序中显示它。 然而,该表中的行数很大,所以我不能使用LiveData在表更改时自动触发并更新我的回收器视图 我目前正在做的是,当在我的应用程序中的某个点进行更改(插入-删除-更新)时,存储库会保留所有更改的列表,当我移回显示这些更改的屏幕时,viewmodel会将行ID与加载的行ID进行比较,并根据需要更新ui。 有更好的方法吗?例如,使用

  • 问题内容: 我对Android开发和Java超级陌生。这是基本设置:我有一个初始屏幕,带有来检查服务器的可用性。在此线程之后,我在活动中进行了回调。这比进行工作更有意义,因为我想在不同的活动中重用此任务。 但是,在我的回调中,我检查状态是否正常。如果是,它将启动下一个活动。但是从回调的上下文来看,我不知道如何获得我的引用,我需要将它作为Intent的参数。 这是我在Activity中OnCreat