1

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?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Thomas
  • 107
  • 6

0 Answers0