为了成为默认的电话应用程序,必须InCallService与meta-data清单中的标记以及使用CALL_PHONE许可一起实施。
到目前为止我做了什么:
Manifest.xml
<uses-permission android:name="android.permission.CALL_PHONE" />
<service
android:name=".InCallServiceImplementation"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_INCALL_SERVICE">
<meta-data
android:name="android.telecom.IN_CALL_SERVICE_UI"
android:value="true" />
<meta-data
android:name="android.telecom.IN_CALL_SERVICE_RINGING"
android:value="true" />
<intent-filter>
<action android:name="android.telecom.InCallService" />
</intent-filter>
</service>
被要求为默认值,用户也授予了CALL_PHONE权限。下面是我的InCallServiceImplementation.java,它扩展了InCallService
@Override
public void onCallAdded(Call call)
{
super.onCallAdded(call);
Log.d("InCallService :", "Added a new call.. \n");
new OngoingCall().setCall(call);
Log.d("InCallService :", "FOUND DIRECTION FOR INCOMING :" + IsInComingCall + ".. \n");
if (IsInComingCall)
{
// START ACTIVITY FOR INCOMING CALL
//IncomingCallActivity.start(this, call);
}
else
{
// START ACTIVITY FOR OUTGOING CALL
//DialerActivity.start(this, call);
}
}
@Override
public void onCallRemoved(Call call)
{
super.onCallRemoved(call);
Log.d("InCallService :", "Call is removed.. \n");
new OngoingCall().setCall(null);
}
下面是我的OngoingCall.java类
private Object callback = new Call.Callback()
{
@Override
public void onStateChanged(Call call, int newState) {
super.onStateChanged(call, newState);
state.onNext(newState);
}
};
public final void setCall(@Nullable Call value)
{
if (call != null)
{
call.unregisterCallback((Call.Callback)callback);
}
if (value != null)
{
value.registerCallback((Call.Callback)callback);
state.onNext(value.getState());
}
call = value;
}
public void answer()
{
assert call != null;
call.answer(VideoProfile.STATE_AUDIO_ONLY);
}
public void hangup()
{
assert call != null;
call.disconnect();
}
工作方式: 如果我通过“我的应用”拨打电话或拨打电话,或者即使从制造商的电话应用中拨打电话,DialerActivity如果将if-else其从功能中删除,它也会启动我onCallAdded
那是什么问题呢:
即使有来电,它仍会显示正在DialerActivity显示拨出电话的画面。我有2个不同的来电和去电活动。
我正在寻找什么分辨率:
我如何找到呼叫是呼入还是呼出,呼叫方向。因此可以向用户呈现适当的布局。
在学习或搜索方面做了哪些努力:
我总是很难理解Google文档的用途是什么?
在[Call.Details] [1]上找到它
[1]:https : //developer.android.com/reference/android/telecom/Call.Details.html#getCallDirection()可以获取方向。我进行了很多搜索,然后再次发现[构建通话应用] [1]
[1]:https://developer.android.com/guide/topics/connectivity/telecom/selfManaged,其中介绍了许多实现方法。只是一些概述和一些不完整的示例,带有许多理论。我找到了[简易电话] [1]
[1]:https://github.com/arekolek/simple-phone,但它是在kotlin中开发的。同一项目在Java中名为[Custom Phone Dialer] [1]
[1]:https : //github.com/Abror96/CustomPhoneDialer 尚未实现此指令。我也没有从Google文档中找到任何适当的分步指南。如果开发人员尝试阅读其示例程序,则会丢失许多变量和函数,这对于阅读无用,并且花费大量时间进行研究。
提前谢谢大家
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。