Невозможно получить обратные вызовы распознавания перехода активности - PullRequest
0 голосов
/ 06 марта 2020

Я пробую простую вещь, но, к сожалению, я не могу этого достичь. Я хочу получить обратные вызовы распознавания перехода активности из Android SDK 26 - 29:

Я зарегистрировал следующие разрешения в манифесте:

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>

В основной активности я проверяю разрешение:

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

Это отлично работает. Разрешение предоставлено.

После этого я регистрирую слушателя:

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
                }
            })
}

Я отладил, и после этого вызывается метод onSuccess.

Это код моего получателя. :

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
                }
            }
        }
    }
}

Моя проблема в том, что метод onReceive никогда не вызывается.

У кого-нибудь есть идеи, в чем может быть проблема?

...