应用程序编译正常,但在设置的默认应用程序中未显示我的应用程序。
要将您的应用程序列为电话应用程序,您必须具有至少这些意图过滤器的活动(处理文档中提到的
ACTION_DIAL的两种情况,也在
DefaultDialerManager hidden class中提到)。
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<data android:scheme="tel" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
</intent-filter>
坦白说,这有点违反直觉,因为设置默认电话应用程序与设置默认拨号器是分开的——前者仅控制正在进行的通话界面,而后者仅控制拨号界面。
为了允许将您的拨号器设置为默认并从Web浏览器启动,可以稍微改进上述最小要求,使用以下意图过滤器:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tel" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
AOSP中的拨号应用程序甚至声明了更多的过滤器。
使用TelecomManager
可以使用户更轻松地将您的应用程序设置为默认电话应用程序:
if (getSystemService(TelecomManager::class.java).defaultDialerPackage != packageName) {
Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER)
.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName)
.let(::startActivity)
}
这将显示类似于此的对话框:
![change default dialer dialog](https://istack.dev59.com/awS6u.webp)
请参考
使用android.telecom和InCallService接听来电的答案,了解如何处理通话本身。
以下是一个应用程序的代码,实现了最少量的功能,以在其自己的用户界面中处理拨号、接受/拒绝/结束通话:
https://github.com/arekolek/simple-phone