如何使用 termux 在我的 phone 上获取默认拨号器应用程序名称

How to get default dialler app name on my phone with termux

我创建了一个 bash 脚本,它使用命令读取通知 termux-notification-list 我使用 while 循环连续读取。 因此,当我接到电话时,此脚本将读取默认拨号器应用程序的通知,并使用我的 npm 包 truecallerjs 搜索 phone 号码,并发送一个通知,其中包含持有该号码的人的姓名。 看下面的截图

所以,我正在使用 mi phone,其中 com.android.incallui 作为默认拨号器应用程序。请参阅下面 link,当有来自 com.android.incallui 的通知时,我的脚本会发送 phone 号码详细信息。 https://github.com/sumithemmadi/truecaller-on-termux/blob/main/run#L52 该脚本仅在用户使用 mi phone 用于其他 phone 时才有效,会有不同的拨号程序。

那么我怎样才能获得默认的拨号程序。

看我用过

 ...
   if [[ $packageName == "com.android.incallui"  ]]
   then
...

应该是

 ...
   if [[ $packageName == "[Default dialer app name]"  ]]
   then
...

无论默认拨号器用户使用什么,[默认拨号器应用程序名称] 应该是将接听电话的应用程序的名称。 如果用户使用 google 拨号器,它应该是

 ...
   if [[ $packageName == "com.google.android.dialer"  ]]
   then
...

对于 android >= 10,使用 adb shell pm grant com.termux android.permission.DUMP 授予 termux DUMP 权限,然后 运行 /system/bin/dumpsys role | grep -A 1 android.app.role.DIALER | grep holders= | sed -E 's/[ \t]+holders=(.*)//'

如果有多个应用分配了该角色,您可能会得到一个数组。

对于 android < 10 你可以 运行 cmd package resolve-activity tel://123456 使用 adb 或 root。

https://android.stackexchange.com/questions/227155/retrieve-list-of-default-apps-via-adb

https://cs.android.com/android/platform/superproject/+/android-12.0.0_r32:packages/modules/Permission/service/java/com/android/role/RoleService.java;l=735

https://cs.android.com/android/platform/superproject/+/android-12.0.0_r32:packages/modules/Permission/service/java/com/android/role/RoleUserState.java;l=384;bpv=0;bpt=1

您可以通过 /system/bin/getprop ro.build.version.sdk 获得 android 版本。

https://github.com/termux/termux-packages/discussions/9987#discussioncomment-2556377