Я узнал, как это сделать, найдя список Android намерений, полученных официальным приложением Soni c Bomb .
Два Android намерения, которые мы ' Вы заинтересованы в: com.sonicalert.v2.intent.test_shake
, com.sonicalert.v2.intent.alarm_dismiss
Использование:
val patterns = arrayOf(
"!WLALALALALALALALA;", // default
"!WTRG0TRG0TRG0TRG;", // pulse
"!WPJ0FPV7S1J600;" // sos
// you can add your own patterns by mixing and matching the vibration components
);
// strength is between 0 and 100; pattern follows the format seen above
fun SonicBomb_Shake(strength: Int, pattern: String, playAlarmAudio: Boolean = false) {
val intent = Intent()
intent.action = "com.sonicalert.v2.intent.test_shake"
intent.putExtra("current strength m", strength)
intent.putExtra("current pattern", pattern)
intent.putExtra("current alarm audio", playAlarmAudio)
MainActivity.instance!!.sendBroadcast(intent)
}
fun SonicBomb_StopShake() {
val intent = Intent()
intent.action = "com.sonicalert.v2.intent.alarm_dismiss"
MainActivity.instance!!.sendBroadcast(intent)
}
Я могу подтвердить, что он работает просто отлично. :)
Обратите внимание, что для этого требуется, чтобы официальное приложение было установлено и запущено - но оно может быть в фоновом режиме, поэтому для меня это не проблема. (Вы также должны иметь возможность, чтобы ваше приложение запускало официальное приложение при запуске, хотя я еще не добавил это.)
Также должна быть возможность перепроектировать официальное приложение, чтобы выяснить, как общаться с устройством без необходимости его установки. Но в целом, усилия не кажутся мне стоящими, учитывая, насколько достаточно основанное на намерениях решение. Кроме того, таким образом вам не нужно поддерживать код для сопряжения с устройством и тому подобное, и это хорошо.