以编程方式在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+版本。 只是评论它,其他代码将正常工作。 希望这对你有用!

链接地址: http://www.djcxy.com/p/47635.html

上一篇: End call in android programmatically

下一篇: Is Void really uninstantiable?