android 来电自动接听和自动挂断

来源:互联网 发布:淘宝电子发票在哪里 编辑:程序博客网 时间:2024/06/10 06:16


注意:android2.3版本不支持下面的自动接听方法。(会抛异常:java.lang.SecurityException: Neither user xxxxx nor current process has android.permission.MODIFY_PHONE_STATE.)

1.创建系统包(com.android.internal.telephony)和aidl文件(ITelephony.aidl)


2.

package com.android.internal.telephony;interface ITelephony{boolean endCall();void answerRingingCall();}

3.

package com.clj.certname.autocalllisten;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import android.app.Activity;import android.os.Bundle;import android.os.RemoteException;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import com.android.internal.telephony.ITelephony;/** * 2015年7月18日10:14:43 * 自动接听和挂断电话 * @author lenovo * */public class AutoCallListen extends Activity{    private ITelephony iTelephony;    private TelephonyManager manager;            @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);                initData();        manager.listen(new PhoneStateListener(){            @Override            public void onCallStateChanged(int state, String incomingNumber)            {                super.onCallStateChanged(state, incomingNumber);                switch (state)                {                case 1:                    //电话接入                    try                    {                        System.out.println("有电话接入 准备挂断电话");                        iTelephony.endCall();//挂断电话                        iTelephony.answerRingingCall(); //接听电话                        System.out.println("成功挂断电话");                    }                    catch (RemoteException e)                    {                        e.printStackTrace();                    }                    break;                default:                    break;                }            }        }, PhoneStateListener.LISTEN_CALL_STATE);    }    private void initData()    {        manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);        Class <TelephonyManager> c = TelephonyManager.class;          try        {            Method getITelephonyMethod = null;              getITelephonyMethod = c.getDeclaredMethod("getITelephony", (Class[])null);              getITelephonyMethod.setAccessible(true);              iTelephony = (ITelephony) getITelephonyMethod.invoke(manager, (Object[])null);        }        catch (NoSuchMethodException e)        {            e.printStackTrace();        }        catch (IllegalAccessException e)        {            e.printStackTrace();        }        catch (IllegalArgumentException e)        {            e.printStackTrace();        }        catch (InvocationTargetException e)        {            e.printStackTrace();        }      }}


0 0
原创粉丝点击