I'm trying a simple thing, but unfortunately, I'm unable to achieve it. I want to receive activity transition recognition callbacks from Android SDK 26 - 29:
I have registered the following permissions in the manifest:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
In the main activity, I check the permission:
private val activityRecognitionPermission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) permission.ACTIVITY_RECOGNITION else "com.google.android.gms.permission.ACTIVITY_RECOGNITION"
if( PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(this, activityRecognitionPermission) )
permissionsToRequest += activityRecognitionPermission
This works fine. The permission is granted.
Afterwards I register the listener:
if (PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(this, activityRecognitionPermission)) {
val transitions = ArrayList<ActivityTransition>()
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.IN_VEHICLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.IN_VEHICLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.ON_BICYCLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.ON_BICYCLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.ON_FOOT)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.ON_FOOT)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.RUNNING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.RUNNING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build())
transitions.add(ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build())
val request = ActivityTransitionRequest( transitions )
val client = ActivityRecognition.getClient(this)
val intent = Intent(this, ActivityRecognitionReceiver::class.java)
activityRecognitionPendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0)
val task = client.requestActivityTransitionUpdates(request, activityRecognitionPendingIntent!!)
task.addOnSuccessListener ( object: OnSuccessListener<Void> {
override fun onSuccess(p0: Void?) {
return
}
})
task.addOnFailureListener ( object: OnFailureListener {
override fun onFailure(p0: Exception) {
return
}
})
}
I debuged and the onSuccess method is called after that.
This is the code of my receiver:
class ActivityRecognitionReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if( ActivityTransitionResult.hasResult(intent)) {
val resultList = ActivityTransitionResult.extractResult(intent)
if( resultList != null ) {
for (event in resultList.transitionEvents) {
// TODO
}
}
}
}
}
My problem is, that the onReceive method is never called back.
Does anyone have an idea, what the problem could be?