首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有这样的方法getITelephony来断开调用

没有这样的方法getITelephony来断开调用
EN

Stack Overflow用户
提问于 2013-04-11 18:03:51
回答 3查看 4.3K关注 0票数 11

我想在ICS中断开呼出呼叫。

我的问题是,首先,我不能在IC`在姜饼中得到广播,它工作得很好,并且阻塞了呼叫,但在ICS中它不能广播。

我为BroadCast创建了一个服务,因为我在ICS中也得到了PHONE_STATE的BroadCast,但是当我尝试断开呼叫时,我得到的错误是

代码语言:javascript
复制
NO such method name 'getITelephony'

在ICS中,呼叫未断开。

我正在使用下面的代码来使用BroadCast断开呼叫...

代码语言:javascript
复制
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;

ITelephony.aidl

代码语言:javascript
复制
interface ITelephony 
{
    boolean endCall();
    void answerRingingCall();
    void silenceRinger();
}
EN

回答 3

Stack Overflow用户

发布于 2013-05-18 03:25:13

1)下载这个类:ITelephony

2)将此class.java添加到您的工程包中: com.android.internal.telephony

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

代码语言:javascript
复制
<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" />

应用程序balise中的接收器:

代码语言:javascript
复制
<receiver android:name=".CallReceiver" >
   <intent-filter>
     <action android:name="android.intent.action.PHONE_STATE" />
   </intent-filter>
</receiver>

4)创建CallReceiver类:

代码语言:javascript
复制
@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;
}
票数 2
EN

Stack Overflow用户

发布于 2013-04-11 18:19:02

在安卓2.3+中,使用反射来访问"getITelephony“将不起作用

参考资料:

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

How do you programmatically end a call on 2.3+?

票数 1
EN

Stack Overflow用户

发布于 2014-01-13 17:47:12

Class c= Class.forName("android.telephony.TelephonyManager");这将解决你的Android 2.3+的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15945952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档