我们正在构建IP呼叫应用程序的声音。我们对自Google API支持的Google支持的InCallService API感兴趣。
这将允许我们在相同的UI中控制本机调用和OTT调用,这对我们来说非常强大。我们也试过了ConnectionService,但它与我们试图实现的完全相反(Connection服务允许在本机UI中处理我们的VoIP cals)。
问题是如何实现InCallService没有很多文档(几乎没有)。我知道这个:
1)在清单中添加这些行:
<service android:name="your.package.YourInCallServiceImplementation"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService"/>
</intent-filter>
</service>
2)在电信服务绑定到其InCallService实现之前,必须首先将应用程序设置为默认电话应用程序(请参阅getDefaultDialerPackage())。
问题: 我们无法找到将我们的应用设置为默认手机应用的好方法。我们尝试将一个phoneaccount添加到TelecomManager但没有运气(我们这样做是为了连接服务)。
我们还尝试在manifest中的MainActivity +权限中添加这些intent过滤器:
<activity
android:name="MainActivity"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.DIAL"/>
<action android:name="android.intent.action.CALL_PRIVILEGED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="tel"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL"/>
<action android:name="android.intent.action.CALL_PRIVILEGED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="tel"/>
</intent-filter>
</activity>
...
<uses-permission android:name="android.permission.CALL_PHONE"/>
但仍然没有运气。
任何人都有更好的想法来帮助我们吗?
答案 0 :(得分:1)
您可以发送一个方便的Intent
,要求用户将您的应用设置为默认的手机应用:
private void checkDefaultDialer() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return;
}
TelecomManager telecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
boolean isAlreadyDefaultDialer = getPackageName()
.equals(telecomManager.getDefaultDialerPackage());
if (isAlreadyDefaultDialer) {
return;
}
Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER)
.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER);
}