有没有一种在Android模拟器中模拟DetectedActivity.IN_VEHICLE的好方法.目前,我正在尝试通过telnet发送命令来调用ActivityRecognitionApi来检测事件.
sensor set acceleration {x}:{y}:{z}
geo fix {latitude} {longitude}
Run Code Online (Sandbox Code Playgroud) Google Play服务提供了一种ActivityRecognitionApi可让您检测各种用户活动(通过DetectedActivity)的功能,例如用户是在行走还是在跑步.
为开发和测试目的,是否可以模拟这些活动?
在Google Play服务活动识别中有
DetectedActivity.RUNNING,
DetectedActivity.WALKING,
DetectedActivity.ON_FOOT
Run Code Online (Sandbox Code Playgroud)
当我得到行走或跑步的活动更新时,我得到ON_FOOT
我该如何区分?
我知道它说RUNNING和WALKING:"这是ON_FOOT的子活动"
谢谢你的帮助.
在Android 4.4谷歌播放服务中引入了"行走"活动识别,但已经有on_foot认可.
我有点困惑为什么我的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
位置访问是否依赖于活动识别过程?在某些设备中,只有在打开我的位置设置后,我才能让我的活动识别示例工作
Google Play服务更新至4.1后,我们的应用程序面临一个奇怪的问题.我们在Google Play服务中使用了活动识别功能.如果用户将"位置"模式更改为"仅设备"并返回"省电",则活动识别客户端将停止提供活动更新.我们试图停止并重新请求更新,但它不起作用.我们发现只有让它重新运行的解决方案才是重新启动手机.
重现步骤:
我们在Google Play Services 4.2版本中测试了相同的方案.问题在4.2中仍然存在.
在早于KitKat的手机中,可以通过关闭"使用无线网络"并在位置服务下再次打开来重现同样的问题.
任何通过这一障碍的建议都将受到赞赏.
我正在尝试实现活动识别,因此它将支持api 23.我已经按照此处运行的权限指南进行操作:
https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous
我无法确定活动识别是否被归类为危险许可或正常?
即使在谷歌的活动识别样本中,他们也没有针对api 23:https://github.com/googlesamples/android-play-location/tree/master/ActivityRecognition
Android 6.0中是否可能不支持活动重新认知?
android android-permissions activity-recognition android-6.0-marshmallow
我正在使用 Android ActivityRecognition api。当将 PendingIntent 标志设置为PendingIntent.FLAG_UPDATE_CURRENT 或 PendingIntent.FLAG_IMMUTABLE(按照建议?)时,收到的意图不包含任何额外内容。
我的使用方法如下:
首先,我创建一个待处理的意图,如下所示:
private val intent: Intent = Intent(context, ActivityRecognitionReceiver::class.java)
private val mActivityTransitionPendingIntent = PendingIntent.getBroadcast(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) //This gives warning that Mutability flag required
Run Code Online (Sandbox Code Playgroud)
然后,我像这样设置转换列表:
private val INTERESTING_TRANSITION = intArrayOf(
DetectedActivity.IN_VEHICLE,
DetectedActivity.STILL,
DetectedActivity.ON_FOOT,
DetectedActivity.WALKING,
)
Run Code Online (Sandbox Code Playgroud)
接下来,创建一个请求:
val transitions = mutableListOf<ActivityTransition>()
for (activity in INTERESTING_TRANSITION) {
transitions.add(
ActivityTransition.Builder()
.setActivityType(activity)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build()
)
transitions.add(
ActivityTransition.Builder()
.setActivityType(activity)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build()
)
}
val request = ActivityTransitionRequest(transitions)
Run Code Online (Sandbox Code Playgroud)
最后注册请求:
val transitionTask: Task<Void> = mActivityRecognitionClient.requestActivityTransitionUpdates(request, …Run Code Online (Sandbox Code Playgroud) 我正在使用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