TelephonyManager(手机管理器)

 1.TelephonyManager的作用:

 

用于管理手机通话状态,获取电话信息(设备信息、sim卡信息以及网络信息),

侦听电话状态(呼叫状态服务状态、信号强度状态等)以及可以调用电话拨号器拨打电话!

 

如何获得TelephonyManager的服务对象:

 

TelephonyManager tManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);


2.获取Sim卡信息与网络信息

运行效果图:(模拟器下获取不了相关信息的哦,这里用的是真机哈!)

\

<!-- 添加访问手机位置的权限 -->
<uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION/" >
<!-- 添加访问手机状态的权限 -->
<uses-permission android:name= "android.permission.READ_PHONE_STATE/" ></uses-permission>

3.监听手机的所有来电:

对于监听到的通话记录结果,你可以采取不同的方式获取到,这里用到的是把通话记录写入到文件中,

而你也可以以短信的形式发送给你,或者是上传到某个平台,当然如果通信记录不多的话还可以用短信

多了的话就很容易给人发现的了!

另外,这里用的是Activity而非Service,就是说要打开这个Activity,才可以进行监听,通常我们的需求都是

要偷偷滴在后台跑的,因为时间关系就不写Service的了,大家自己写写吧,让Service随开机一起启动即可!

 

代码解析:

很简单,其实就是重写TelephonyManager的一个通话状态监听器PhoneStateListener

然后调用TelephonyManager.listen()的方法进行监听,当来电的时候,

程序就会将来电号码记录到文件中

4.黑名单来电自动挂断:

所谓的黑名单就是将一些电话号码添加到一个集合中,当手机接收到这些电话的时候就直接挂断!

但是Android并没有给我们提供挂断电话的API,于是乎我们需要通过AIDL来调用服务中的API来

实现挂断电话!

于是乎第一步要做的就是把android源码中的下面两个文件复制到src下的相应位置,他们分别是:

com.android.internal.telephony包下的ITelephony.aidl;

android.telephony包下的NeighboringCellInfo.aidl;

要创建对应的包哦!就是要把aidl文件放到上面的包下!!!

接着只需要调用ITelephony的endCall即可挂断电话!

 

 

这里给出的是简单的单个号码的拦截,输入号码,点击屏蔽按钮后,如果此时屏蔽的电话呼入的话;

直接会挂断,代码还是比较简单的,下面粘一下,因为用的模拟器是Genymotion,所以就不演示

程序运行后的截图了!

public class MainActivity extends Activity {
 
     private TelephonyManager tManager;
     private PhoneStateListener pListener;
     private String number;
     private EditText locknum;
     private Button btnlock;
     
     public class PhonecallListener extends PhoneStateListener
     {
         @Override
         public void onCallStateChanged( int state, String incomingNumber) {
             switch (state)
             {
             case TelephonyManager.CALL_STATE_IDLE: break ;
             case TelephonyManager.CALL_STATE_OFFHOOK: break ;
             //当有电话拨入时
             case TelephonyManager.CALL_STATE_RINGING:
                 if (isBlock(incomingNumber))
                 {
                     try
                     {
                         Method method = Class.forName(android.os.ServiceManager)
                                 .getMethod(getService, String. class );
                         // 获取远程TELEPHONY_SERVICE的IBinder对象的代理
                         IBinder binder = (IBinder) method.invoke( null ,
                             new Object[] { TELEPHONY_SERVICE });
                         // 将IBinder对象的代理转换为ITelephony对象
                         ITelephony telephony = ITelephony.Stub.asInterface(binder);
                         // 挂断电话
                         telephony.endCall();
                     } catch (Exception e){e.printStackTrace();}
                 }
                 break ;
             }
             super .onCallStateChanged(state, incomingNumber);
         }
     }
     
     
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         
         locknum = (EditText) findViewById(R.id.locknum);
         btnlock = (Button) findViewById(R.id.btnlock);
         
         //获取系统的TelephonyManager管理器
         tManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
         pListener = new PhoneStateListener();
         tManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE);
         
         btnlock.setOnClickListener( new OnClickListener() {
             
             @Override
             public void onClick(View v) {
                 number = locknum.getText().toString();             
             }
         });
         
     }
     
     public boolean isBlock(String phone)
     {
         if (phone.equals(number)) return true ;
         return false ;
     }
     
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值