CallScreeningService - отключение вызова через несколько секунд - Android 10 - PullRequest
2 голосов
/ 11 июля 2020

Попытка отключить входящий звонок через несколько секунд после звонка Android 10. Использование CallScreeningService для фильтрации входящего звонка.

@RequiresApi(Build.VERSION_CODES.N)
class MyCallScreeningService :
  CallScreeningService() {


  @RequiresApi(Build.VERSION_CODES.Q)
  override fun onScreenCall(details: Call.Details?) {
    if (details?.callDirection == Call.Details.DIRECTION_INCOMING) {
      val phoneNumber = details.handle.schemeSpecificPart
      val blockedList = Paper.book().read(Constants.FIELD_BLOCKED_LIST, ArrayList<String>())
      if (blockedList.contains(phoneNumber)) {
        disconnectCall(details, phoneNumber)
      } 
    }
  }

  private fun disconnectCall(details: Call.Details, phoneNumber: String) {
    Handler().postDelayed({
      respondToCall(details, buildResponse())
    }, 3000L)
  }

  private fun buildResponse(): CallResponse {
    return CallResponse.Builder()
      .setRejectCall(true)
      .setDisallowCall(true)
      .setSkipNotification(true)
      .setSkipCallLog(true)
      .build()
  }
}

Проблема в том, что я установил время handler слишком низкий, звонок отключается без звонка на стороне получателя. Хотя, если я установлю его выше, например, на 6 секунд, то появится уведомление о звонке, но отключение не работает.

...