簡體   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