以编程方式在android中结束调用
我看到很多问题,无法在Android中以编程方式结束调用。 与此同时,我在谷歌播放市场上看到很多拨号器应用程序,您可以在其中激活呼叫并放弃它。 他们如何工作?
编辑 :我读过的地方,我的应用程序必须是系统应用程序。 那么如何使它成为系统,系统和用户应用程序有什么区别?
你不需要成为一个系统应用程序。 首先,在您的项目中创建包com.android.internal.telephony
,并将其放入名为“ ITelephony.aidl
”的文件中:
package com.android.internal.telephony;
interface ITelephony {
boolean endCall();
void answerRingingCall();
void silenceRinger();
}
一旦你有了,你可以使用这段代码来结束一个调用:
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.endCall();
例如,你可以在PhoneStateListener中使用它。 为此,您需要清单中的权限:
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
编辑:道歉可怕的格式,我仍然无法弄清楚如何正确地做代码块在这里:/
随着添加android电话接口和广播接收器,您还需要添加Android清单接收器条目与动作android.intent.action.PHONE_STATE
为您想要处理intent的接收者。
如果添加,您将得到编译时错误
uses-permission android:name="android.permission.MODIFY_PHONE_STATE`
在你的清单文件中。 但即使我们删除它,它也会自动拒绝来电。
SilenceRinger()
不适用于Android 2.3+版本。 只是评论它,其他代码将正常工作。 希望这对你有用!