最近有一个想法,就是如果我此刻不方便接电话,想发一条信息告诉对方。因为是不方便嘛,所以那时再手打好信息发给对方是不现实的。如果我们能预先就写好了信息,不方便接听时手机自动帮我们把信息发给来电的朋友,那就方便多了。怎么实现呢?
首先我声明一下,我说的是Android手机啦,苹果嘛,水果店几块钱一斤的还是买得起的。hehe...
需求分析一下:1、给来电人发信息,要获得来电人的来电号码;
2、让系统发送你编辑好的短信。
获得来电号码,需要用到一个类:ThelephonyManager
TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在应用程序中可以使用这些get方法获取相关数据。
TelephonyManager类的对象可以通过Context.getSystemService(Context.TELEPHONY_SERVICE)方法来获得,需要注意的是有些通讯信息的获取对应用程序的权限有一定的限制,在开发的时候需要为其添加相应的权限。
本程序就用到了TelephonyManager给电话服务增加状态监听器,监听来电,通话,挂断等状态 。
PhoneStateListener,获得当前的电话状态,并获得来电号码;
TelephonyManager tpm;
tpm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);//获取电话通讯服务
tpm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);//给电话服务增加状态监听器,监听来电,通话,挂断等状态
class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
num = incomingNumber;
switch(state) {
case TelephonyManager.CALL_STATE_IDLE: //空闲
break;
case TelephonyManager.CALL_STATE_RINGING: //来电
if(isSendMes){
sendMes(); //短信发送
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //摘机(正在通话中)
break;
}
}
}
incomeNumber就是我们所需要的来电号码;
private void sendMes(){
//直接调用短信接口发短信
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(num, null, text, null, null);
}
text是我们要发送的信息。
完成上面的工作之前,要在AndroidManifest.xml加入权限:
<pre name="code" class="html"> <uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />