Mot*_*tov 5 android activity-recognition
我正在使用 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, mActivityTransitionPendingIntent)
Run Code Online (Sandbox Code Playgroud)
现在如您所见,我使用一个广播接收器,它应该接收 ActivityRecognition 广播的意图!现在接收器可以工作了!它确实收到了应有的广播,但额外的内容似乎是空的!
onReceive 看起来像这样:
override fun onReceive(context: Context, intent: Intent?) {
Log.i(TAG, "onReceive: ${intent?.extras}") //Here i am getting null!!
intent?.let {
if(ActivityTransitionResult.hasResult(it)){
Log.i(TAG, "onReceive: hasTransition..")
activityDetectionProcessor.onActivityTransition(ActivityTransitionResult.extractResult(it))
}
if (ActivityRecognitionResult.hasResult(it)) {
Log.i(TAG, "onReceive: hasResult: ${it.toString()} ")
processDetectedActivities(ActivityRecognitionResult.extractResult(it)?.probableActivities)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我仅使用PendingIntent.FLAG_UPDATE_CURRENT时,它确实有效!但随后我收到编译警告,提示我应该指定可变性标志。当使用PendingIntent.FLAG_MUTABLE时,它也可以工作,但它也会在代码中发出警告(不清楚)。
目标SDK为31。所有权限均已正确授予。
用图像更新:
此外,一旦我根据 Build.VERSION 设置标志,编译错误就会消失,如下所示:
private val pIntentFlags = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
} else {
PendingIntent.FLAG_UPDATE_CURRENT
}
private val mActivityTransitionPendingIntent = PendingIntent.getBroadcast(context, 1, intent, pIntentFlags)
Run Code Online (Sandbox Code Playgroud)
您必须PendingIntent.FLAG_MUTABLE在创建PendingIntentfor时添加该标志requestActivityTransitionUpdates()。
与我的代码一起使用时,我没有看到任何编译错误或警告PendingIntent.FLAG_MUTABLE。如果这样做,请发布警告消息。
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |