没有这样的方法getITelephony断开呼叫

我想断开在ICS传出的呼叫。

我的问题是首先,我没有得到在姜饼IC`广播它工作正常,并阻止呼叫,但在ICS其不广播。

对于BroadCast我创build了一个服务,并且在ICS中我也获得了PHONE_STATE ,但是当我尝试断开呼叫时,出现错误

 NO such method name 'getITelephony' 

在ICS呼叫不断开。

我正在使用以下代码来断开使用BroadCast的呼叫…

 try{ TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); Class c = Class.forName(manager.getClass().getName()); Method m = c.getDeclaredMethod("getITelephony"); m.setAccessible(true); ITelephony telephony = (ITelephony)m.invoke(manager); telephony.endCall(); } catch(Exception e){ Log.d("",e.getMessage()); } 

AndroidMaifest.xml

PhonecallStateBroadcastReceiver.java

package com.android.internal.telephony; packgename package com.android.internal.telephony;

ITelephony.aidl

 interface ITelephony { boolean endCall(); void answerRingingCall(); void silenceRinger(); } 

Solutions Collecting From Web of "没有这样的方法getITelephony断开呼叫"

使用reflection来访问“getITelephony”在Android 2.3+中不起作用

参考:

http://hive-mind.org/android-call-blocking

你如何以编程方式在2.3+结束通话?

1)下载这个类: ITelephony

2)在package:com.android.internal.telephony的项目中添加这个class.java

3)在清单中添加此权限:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> 

而这款接收器在应用上表示:

 <receiver android:name=".CallReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver> 

4)创buildCallReceiver类:

 @Override public void onReceive(Context context, Intent intent) { ITelephony telephonyService = getTeleService(context); if(telephonyService!=null) { try { String numberCall = intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.i("TAG", "CALL NUM: " + numberCall); if(numberCall.equals(TEST_NUMBER)) { telephonyService.endCall(); Toast.makeText(context, "END CALL: " + numberCall, Toast.LENGTH_LONG).show(); Log.i("TAG", "END CALL"); } else { Log.i("TAG", "ACCEPT CALL"); } } catch (Exception e) { e.printStackTrace(); Log.i("TAG", "CATCH CALL"); } } } private ITelephony getTeleService(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); try { Method m = Class.forName(tm.getClass().getName()).getDeclaredMethod("getITelephony"); m.setAccessible(true); return (ITelephony) m.invoke(tm); } catch (Exception e) { e.printStackTrace(); } return null; } 

Class c = Class.forName(“android.telephony.TelephonyManager”); 这将解决您的问题为Android 2.3以上