1.创建服务,在服务中创建创建电话管理者, TelephonyManager创建一个电话状态监听器,服务开启时开始监听电话状态,服务销毁时停止监听电话状态
2.创建监听器内部实现类,重写内部方法,如果手机是响铃状态,调用dao层中的ShowAddress类中的查询号码归属地的方法,
3.在程序设置模块添加"是否开启来电号码归属地显示条目",注册onclick事件
-----------------------------------------------------------------------------
1.创建服务,在服务中创建创建电话管理者, TelephonyManager创建一个电话状态监听器,服务开启时开始监听电话状态,服务销毁时停止监听电话状态
2.创建监听器内部实现类,重写内部方法,如果手机是响铃状态,调用dao层中的ShowAddress类中的查询号码归属地的方法,
/**
* 来电时显示来电号码归属地的服务
*
@author
Administrator
*
*/
public
class
ShowAddressService
extends
Service {
private
TelephonyManager
tm
;
private
MyListener
listener
;
@Override
public
IBinder onBind(Intent intent) {
return
null
;
}
/**
* 服务创建的时候
*/
@Override
public
void
onCreate() {
super
.onCreate();
//创建电话管理者
tm
=(TelephonyManager) getSystemService(
TELEPHONY_SERVICE
);
listener
=
new
MyListener();
//初始化MyListener()
//注册一个监听器,监听电话状态的改变
tm
.listen(
listener
, PhoneStateListener.
LISTEN_CALL_STATE
);
}
/**
* 服务销毁的时候
*/
@Override
public
void
onDestroy() {
super
.onDestroy();
// 当服务停止的时候 取消电话监听
tm
.listen(
listener
, PhoneStateListener.
LISTEN_NONE
);
listener
=
null
;
}
/**
* 电话状态的监听器
*
*/
public
class
MyListener
extends
PhoneStateListener{
@Override
public
void
onCallStateChanged(
int
state, String incomingNumber) {
super
.onCallStateChanged(state, incomingNumber);
switch
(state) {
case
TelephonyManager.
CALL_STATE_IDLE
:
//空闲状态
break
;
case
TelephonyManager.
CALL_STATE_RINGING
:
//响铃状态
//响铃时获取来电号码得到号码归属地
String location = AddressDao.getAddress(incomingNumber, getApplicationContext());
Toast. makeText(getApplicationContext(), location, 1).show();
break
;
case
TelephonyManager.
CALL_STATE_OFFHOOK
:
//接听状态
break
;
}
}
}
}
--------------------------------------------------------------------------------------------
3.在程序设置模块添加"是否开启来电号码归属地显示条目",注册onclick事件
public
class
SettingActivity
extends
Activity {
private
SettingView
auto_update
;
private
SettingView
sv_number_address
;
private
SharedPreferences
sp
;
Intent
intent_numberaddress
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.
activity_setting
);
//------------------------版本自动跟新--------------------------------
//找到关系的SettingView
auto_update
=(SettingView) findViewById(R.id.
sv_auto_update
);
auto_update
.setTitle(
"我是标题"
);
auto_update
.setDescri(
"自动更新版本设置"
);
sp
=getSharedPreferences(
"config"
,
MODE_PRIVATE
);
//创建sp 存储器
boolean
isautoupdate=
sp
.getBoolean(
"isChecked"
,
false
);
auto_update
.setChecked(isautoupdate);
//给布局中的条目设置点击事件
auto_update
.setOnClickListener(
new
OnClickListener() {
android.content.SharedPreferences.Editor
editor
=
sp
.edit();
@Override
public
void
onClick(View v) {
if
(
auto_update
.isChecked()){
auto_update
.setChecked(
false
);
editor
.putBoolean(
"isChecked"
,
false
);
}
else
{
auto_update
.setChecked(
true
);
editor
.putBoolean(
"isChecked"
,
true
);
}
editor
.commit();
}
});
//---------------------------- 来电号码归属地显示--------------------------------------------------------
sv_number_address
=(SettingView) findViewById(R.id.
sv_number_address
);
sv_number_address
.setTitle(
"未开启"
);
sv_number_address
.setDescri(
"来电号码归属地提醒"
);
intent_numberaddress
=
new
Intent(getApplicationContext(),ShowAddressService.
class
);
//给布局中的条目设置点击事件
sv_number_address
.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
if
(
sv_number_address
.isChecked()){
sv_number_address
.setChecked(
false
);
stopService(
intent_numberaddress
);
}
else
{
sv_number_address
.setChecked(
true
);
startService(
intent_numberaddress
);
}
}
});
}
}