I’m trying to get activity transition from users on Pixel 2 API 30, Kotlin. The logs from onReceive doesn’t appear, so I guess the fun doesn’t call. It worked only once without changing anything.
Class ActivityTransitionReceiver.kt
package com.example.licenta_1
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import android.widget.Toast
import com.example.licenta_1.placeholder.Constants
import com.google.android.gms.location.ActivityTransitionResult
import java.text.SimpleDateFormat
import java.util.*
class ActivityTransitionReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.d("*****onrecevie", "**************inaninte de if in onreceive")
if (ActivityTransitionResult.hasResult(intent)) {
Log.d("in if", "in iful de la on receive")
val result = ActivityTransitionResult.extractResult(intent)
result?.let {
result.transitionEvents.forEach { event ->
//Info for debugging purposes
val info =
"Transition: " + ActivityTransitionsUtil.toActivityString(event.activityType) +
" (" + ActivityTransitionsUtil.toTransitionType(event.transitionType) + ")" + " " +
SimpleDateFormat("HH:mm:ss", Locale.US).format(Date())
Log.d("///////////activity", ActivityTransitionsUtil.toActivityString(event.activityType ))
println("coocococococ")
Log.d("/////////id", Constants.ACTIVITY_TRANSITION_NOTIFICATION_ID.toString())
Toast.makeText(context, info, Toast.LENGTH_LONG).show()
}
}
}
}
}
ActivityTransitionUtil
package com.example.licenta_1
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import com.google.android.gms.location.ActivityTransition
import com.google.android.gms.location.ActivityTransitionRequest
import com.google.android.gms.location.DetectedActivity
import java.util.jar.Manifest
object ActivityTransitionsUtil {
private fun getTransitions(): MutableList<ActivityTransition> {
val transitions = mutableListOf<ActivityTransition>()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.IN_VEHICLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.IN_VEHICLE)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.RUNNING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build()
transitions +=
ActivityTransition.Builder()
.setActivityType(DetectedActivity.RUNNING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build()
return transitions
}
fun getActivityTransitionRequest() = ActivityTransitionRequest(getTransitions())
fun hasActivityTransitionPermissions(context: Context): Boolean =
!(ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACTIVITY_RECOGNITION) != PackageManager.PERMISSION_GRANTED)
fun toActivityString(activity: Int): String {
return when (activity) {
DetectedActivity.STILL -> "STILL"
DetectedActivity.WALKING -> "WALKING"
DetectedActivity.IN_VEHICLE -> "IN VEHICLE"
DetectedActivity.RUNNING -> "RUNNING"
else -> "UNKNOWN"
}
}
fun toTransitionType(transitionType: Int): String {
return when (transitionType) {
ActivityTransition.ACTIVITY_TRANSITION_ENTER -> "ENTER"
ActivityTransition.ACTIVITY_TRANSITION_EXIT -> "EXIT"
else -> "UNKNOWN"
}
}
}
code from MainActivity
private fun showToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG)
.show()
}
private fun getPendingIntent(): PendingIntent {
val intent = Intent(this, ActivityTransitionReceiver::class.java)
// val TRANSITIONS_DATA = "action.TRANSITIONS_DATA"
// intent.setAction(TRANSITIONS_DATA)
return PendingIntent.getBroadcast(
this,
Constants.REQUEST_CODE_INTENT_ACTIVITY_TRANSITION,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
}
private fun requestForUpdates() {
client
.requestActivityTransitionUpdates(
ActivityTransitionsUtil.getActivityTransitionRequest(),
getPendingIntent()
)
.addOnSuccessListener {
showToast("successful registration")
}
.addOnFailureListener { e: Exception ->
println("***********exceptie" + e)
showToast("Unsuccessful registration")
}
}
in onCreate from MainActivity with lateinit var client: ActivityRecognitionClient
client = ActivityRecognition.getClient(this)
//activity
if (!ActivityTransitionsUtil.hasActivityTransitionPermissions(this)) {
requestPermissions(this,
arrayOf(Manifest.permission.ACTIVITY_RECOGNITION),REQUEST_CODE_ACTIVITY_TRANSITION );
requestForUpdates()
} else
{
requestForUpdates()}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.licenta_1">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="com.google.android.permission.ACTIVITY_RECOGNITION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Licenta_1">
<activity
android:name=".MainActivity2"
android:exported="true" />
<activity
android:name=".GoogleSignInActivity"
android:exported="false" />
<service
android:name=".LocationService"
android:enabled="true"
android:exported="true"/>
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.Licenta_1.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".ActivityTransitionReceiver"
android:exported="false"
android:permission="com.google.android.gms.permission.ACTIVITY_RECOGNITION">
<intent-filter>
<action android:name="action.TRANSITIONS_DATA" />
</intent-filter>
</receiver>
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
</application>
</manifest>