繁体   English   中英

测试活动识别转换 API

[英]Testing Activity Recognition Transition API

我目前正在开发一个使用 Activity Recognition Transition API 的应用程序(新的,而不是旧的,请查看下面的链接)。 我的问题是,如何测试我的应用程序? 更确切地说,我怎样才能“手动”触发转换事件? 我真的必须将手机和笔记本电脑放入背包并骑自行车去触发 ON_BYCICLE/ACTIVITY_TRANSITION_ENTER 事件吗? 必须有一个更简单的方法:) 也许使用 adb? https://developer.android.com/studio/test/command-line

API 文档:https ://developer.android.com/guide/topics/location/transitions

您可以使用以下代码来模拟事件

        var intent = Intent()

        // Your broadcast receiver action

        intent.action = BuildConfig.APPLICATION_ID + "TRANSITIONS_RECEIVER_ACTION"
        var events: ArrayList<ActivityTransitionEvent> = arrayListOf()

        // You can set desired events with their corresponding state

        var transitionEvent = ActivityTransitionEvent(DetectedActivity.IN_VEHICLE, ActivityTransition.ACTIVITY_TRANSITION_ENTER, SystemClock.elapsedRealtimeNanos())
        events.add(transitionEvent)
        var result = ActivityTransitionResult(events)
        SafeParcelableSerializer.serializeToIntentExtra(result, intent, "com.google.android.location.internal.EXTRA_ACTIVITY_TRANSITION_RESULT")
        activity?.sendBroadcast(intent)

我在我的应用程序中创建了带有两个按钮的简单活动,我分别在其中广播这些事件(开始和停止)。 这有助于我优雅地调试应用程序。

我不知道有什么方法可以从您的应用程序外部模拟转换事件。 但是在您的应用程序中,您可以构建一个合适的Intent并将其发送给您的接收器。

将此方法添加到任何Context (例如ActivityService ):(Kotlin)

class MyService: Service() {
  fun sendFakeActivityTransitionEvent() {
    // name your intended recipient class
    val intent = Intent(this, MyReceiver::class.java)
    
    val events: ArrayList<ActivityTransitionEvent> = arrayListOf()
    
    // create fake events
    events.add(
      ActivityTransitionEvent(
        DetectedActivity.ON_BICYCLE,
        ActivityTransition.ACTIVITY_TRANSITION_ENTER,
        SystemClock.elapsedRealtimeNanos()
      )
    )
    
    // finally, serialize and send
    val result = ActivityTransitionResult(events)
    SafeParcelableSerializer.serializeToIntentExtra(
      result,
      intent,
      "com.google.android.location.internal.EXTRA_ACTIVITY_TRANSITION_RESULT"
    )
    this.sendBroadcast(intent)
  }
}

将您想要的接收者替换为MyReceiver - BroadcastReceiver的任何子类都应该工作。

然后在需要时调用sendFakeActivityTransitionEvent()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM