zoukankan      html  css  js  c++  java
  • 拦截来电

    public class MyService extends Service {
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
            //监听来电。
            TelephonyManager manager = (TelephonyManager) getSystemService(Service.TELEPHONY_SERVICE);
            PhoneStateListener listener = new MyPhoneStateListener();
            manager.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);//监听电话状态。
        }
        class MyPhoneStateListener extends PhoneStateListener{
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                Log.i("Main",incomingNumber+"");
                if("5556".equals(incomingNumber)){
                    switch (state){//判断状态
                        case TelephonyManager.CALL_STATE_IDLE://0
                                    //挂断
                            Log.i("Main",TelephonyManager.CALL_STATE_IDLE+"");
                                break;
                        case TelephonyManager.CALL_STATE_RINGING://1
                            //响铃状态。
                            Log.i("Main", TelephonyManager.CALL_STATE_RINGING + "");
                            try {
                                //forName:要反射的包名.类名。----
                                Class myclass =   Class.forName("android.os.ServiceManager");
                                //得到方法。
                                /*
                                1;参数:方法的名称
                                2:参数:方法参数的类型的字节码文件。
                                 */
                                Method method = myclass.getMethod("getService", String.class);
                                //调用方法。
                                /*
                                1:表示是否用对象来调用这个方法。如果不用对象则用null,
                                2:表示实参
                                 */
                               ITelephony binder = (ITelephony) method.invoke(null, Service.TELEPHONY_SERVICE);
                                binder.endCall();//挂断电话
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            } catch (NoSuchMethodException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (RemoteException e) {
                                e.printStackTrace();
                            }
                            break;
                        case TelephonyManager.CALL_STATE_OFFHOOK://2
                            //通话状态
                            Log.i("Main",TelephonyManager.CALL_STATE_OFFHOOK+"");
                            //
                            break;
                    }
                }
            }
        }
    }
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Intent intent = new Intent(this,MyService.class);
            startService(intent);
        }
    }

     

  • 相关阅读:
    Python时间戳
    vux x-input 清除按钮不起作用
    MySQL连接查询流程源码
    Linux下用的脚本
    TableCache设置过小造成MyISAM频繁损坏 与 把table_cache适当调小mysql能更快地工作
    批量导入数据到InnoDB表速度优化
    DBA面对新mysql环境
    (进阶篇)PHP+Mysql+jQuery找回密码
    (进阶篇)PHP实现用户注册后邮箱验证,激活帐号
    (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5405514.html
Copyright © 2011-2022 走看看