Android黑名单自动挂断来电(AIDL)

1.创建aidl文件夹,把监听电话状态的两个包复制到aidl文件夹里,android.telephony,com.android.internal.telephony,这两个包可以去官网下载,没有的可以找我要。

2.PhoneMonitor

public class PhoneMonitor extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {

   // Log.i("test","有电话进来了:");
    if ("android.intent.action.PHONE_STATE".equals(intent.getAction())){
        //获取号码

        //电话管理者
        TelephonyManager telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        //得到电话的状态
        int state=telephonyManager.getCallState();

// Log.i(“test”,”有电话进来了:”+number);
// Toast.makeText(context, “电话进来了:”+number, Toast.LENGTH_SHORT).show();

        switch (state){
            case TelephonyManager.CALL_STATE_RINGING:
                //得到电话号码
                String number=intent.getStringExtra("incoming_number");
                //得到电话管理者类对象
                Class<TelephonyManager> clazz=TelephonyManager.class;
               // TelephonyManager telephonyManager=(TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
                try {
                    Method  method = clazz.getDeclaredMethod("getITelephony",null);
                    //设置可访问
                    method.setAccessible(true);
                    //执行方法
                    ITelephony iTelephony = (ITelephony)method.invoke(telephonyManager,null);
                    //根据设置的黑名单号码与得到的电话号码做判断
                    if ("15116396472".equals(number)){
                        //如果是就挂断
                        iTelephony.endCall();
                        Log.i("test","来电了"+number);
                    }
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }


                // Log.i("test","来电话了");
                break;

            case TelephonyManager.CALL_STATE_OFFHOOK:
                Log.i("test","通话中");
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                Log.i("test","挂断");
                break;
        }

    }
}

}

3.AndroidManifest.xml

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


<receiver android:name=".PhoneMonitor">
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE"></action>
        </intent-filter>
</receiver>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值