Android: завершить вызов WhatsApp программно с помощью имитации ключевых событий [NON ROOT] - PullRequest
0 голосов
/ 15 февраля 2020


Мне нужны подсказки для программного завершения вызова WhatsApp.

это приложение для программного вызова WhatsApp программно с таймерами, поэтому, когда таймер выключается, сам вызов завершается

вот код для начала звонка.
это делается через contactId и намерение связаться с

contactId = getContactIdFromNumber(Utils.formatPhoneNumber(phoneNumber), mimeType)
url = Constants.CALL_URI + contactId.toString()

if (contactId != 0.toLong()) {
    val i = Intent(Intent.ACTION_VIEW) 
    i.setDataAndType(Uri.parse(url),"vnd.android.cursor.item/vnd.com.whatsapp.video.call")
    i.setPackage("com.whatsapp")

    startActivity(i)
}

и вот мой код для завершения звонка

thread(start = true) {
   Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK)
}

я пытался с помощью adb вызов завершился.
, но когда он выполняется с указанным выше кодом, ему необходимо разрешение INJECT_EVENTS

java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission

Я знаю, что INJECT_EVENTS требует подписи системного приложения.
но это немного сложно.
есть ли способ сделать это "нормально"?
на данный момент лучшее, что я могу найти, - это инструментальная среда, для которой требуется подпись приложений root / system.

Кто-нибудь имел решение для завершения вызова или для кода выше?

на данный момент, я думаю, root не вариант, потому что владелец не будет root его устройств. но это нормально для подписи системных приложений, если не нужно root или иначе.

спасибо до

...