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
;
}
}