因为公司主要做蓝牙手环这块。这阵子负责来电提醒和短信提醒。其实原理比较简单。就是开启一个Service监听手机的来电和短信。然后判断手机跟蓝牙的连接服务是是否连接,已连接的话则根据协议完手环发送来电、短信所需要的协议。不多说了。上代码。首先是Service类中的onCreate方法中注册手机来电和短信监听。监听我是用了TelephonyManager。短信我是用了SmsObserver。
下面是一个电话监听类
tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
//创建一个监听器,监听电话呼叫状态的变化。
myPhoneListener = new MyPhoneListener();
//开始监听用户的通话状态
tm.listen(myPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
smsObserver = new SmsObserver(this, smsHandler);
//注册一个内容观察者监听短信的变化
getContentResolver().registerContentObserver(SMS_INBOX, true,
smsObserver);
然后短信监听的话需要系统的一个Uri
private Uri SMS_INBOX = Uri.parse("content://sms");
下面是一个电话监听类
private class MyPhoneListener extends PhoneStateListener{
//当手机呼叫状态变化的时候 执行下面代码。
//state 电话的状态
//incomingnumber 来电号码
@Override
public void onCallStateChanged(int state, String incomingNumber) {
try {
//判断我们当前手机的通话状态
switch (state) {
//手机处于空闲状态,没有人打电话 没有零响
case TelephonyManager.CALL_STATE_IDLE:
if (!"".equals(incomingNumber)) {
if (BLEServiceHelper.getInstance().getService() == null) {
BLEServiceHelper.getInstance().getService().connect(EBLEService.BLEType.CLOSE_PHONE_NOTIFT, BaseApplication.getInstance().getUserInfo().getMacAddress());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
BLEServiceHelper.getInstance().getService().writeData(true, GattAttributes.TO_GET