标签: activitytransitionapi

Android defaultSensor TYPE_SIGNIFICANT_MOTION 在 24 小时后返回 null

我有点困惑为什么我的Transitions API解决方案通常在第一天或两天有效,然后停止接收任何更新。我更深入地研究了它,发现了一个线索,其中讨论了我们如何需要SIGNIFICAT_MOTION激活传感器才能唤醒传感器,最终唤醒Transitions API整个解决方案。

我所做的是实现了侦听器,它可以帮助我了解SIGNIFICANT_MOTION传感器何时启用以及何时不启用:

    try {
        boolean request = sensorManager.requestTriggerSensor(triggerEventListener, sensor);
        Timber.e("Transitions API is working. If returns false - device is STILL");
    } catch (IllegalArgumentException exception) {
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);

        Timber.e("SensorManager - " + sensorManager + ", sensor - " + sensor); //TODO: Later delete
    }
Run Code Online (Sandbox Code Playgroud)

现在,如您所见,每当此代码抛出异常时,我都会尝试重新初始化传感器,以确保稍后在应用程序中不会抛出异常。日志显示sensor is null

当传感器在一两天后变为空时(第一天它运行良好并且设备正确返回传感器值),除了重新启动设备之外,没有其他方法可以解决问题。

问题:为什么sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);第一天返回值(传感器),但 48 小时后返回 null 并停止工作?(我相信这会搞乱我的 Transitions API 解决方案,并且是它无法正常工作的根本原因)。

附加信息。

手机:Google Pixel 3A 操作系统:Android …

android activity-recognition significant-motion-sensor activitytransitionapi

6
推荐指数
0
解决办法
373
查看次数

Android Transitions API - 24-48 小时后停止接收任何更新

我正在使用Transitions API,前 24-48 小时一切正常 - 我从 API 收到身体活动变化,但 24-48 小时后什么也没有。

在 Transitions API Receiver 下,我使用Foreground Service48 小时后仍处于活动状态的接收器。我可以通过查看日志来验证这一点;此外,Location (Fused Location Client)24-48 小时后仍然会有更新,而 Transition API 似乎已经死了。

有人经历过这个吗?我确实认为使用 Worker 重置(取消注册然后再次注册)转换 API 可能是替代方案(每 1-2 小时一次)。不确定这是否有帮助。我有一种感觉,当应用程序进入打瞌睡模式/某种睡眠状态时,就会发生这种情况。

另外,我的前台服务使用exported=false,也许将其设置为true会有帮助?(我希望有人给出答案并解释为什么你应该使用其中之一)

操作系统:安卓12

android activity-recognition activitytransitionapi

5
推荐指数
1
解决办法
398
查看次数

活动过渡API无法正常工作

我希望使用新的Activity过渡API,在按照此处的教程进行操作后我无法获得所需的结果。

这是我用于设置要检测的活动过渡的代码:

public void setActivityTransitions() {
    transitionList = new ArrayList<>();
    ArrayList<Integer> activities = new ArrayList<>(Arrays.asList(
            DetectedActivity.STILL,
            DetectedActivity.WALKING,
            DetectedActivity.ON_FOOT,
            DetectedActivity.RUNNING,
            DetectedActivity.ON_BICYCLE,
            DetectedActivity.IN_VEHICLE));
    for (int activity :
            activities) {
        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER).build());

        transitionList.add(new ActivityTransition.Builder()
                .setActivityType(activity)
                .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT).build());

    }

}
Run Code Online (Sandbox Code Playgroud)

然后请求活动转换更新:

 ActivityTransitionRequest activityTransitionRequest = new ActivityTransitionRequest(transitionList);
        Intent intent = new Intent(context, ActivityDetectorTransitionService.class);
        intent.setAction("com.test.activityrecognition.START_ACTIVITY_TRANSITION_DETECTION_ALARM");
        PendingIntent pendingIntent = PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Task<Void> task = ActivityRecognition.getClient(context).requestActivityTransitionUpdates(activityTransitionRequest, pendingIntent);
        task.addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void result) {
                System.out.println("onSuccess");
            }
        });
        task.addOnFailureListener(new OnFailureListener() …
Run Code Online (Sandbox Code Playgroud)

android android-pendingintent activity-recognition android-broadcastreceiver activitytransitionapi

2
推荐指数
3
解决办法
1537
查看次数