最近开始自学Android开发,决定自己做一点小项目,边做边学,然后就做了一个弹窗短信,今天开始整理整理开发的时候碰到的问题以及学到的东西。
今天先说利用Receiver获取系统广播,获得新短信,网上其实还有另一种方法:监听系统短信数据库,
一、注册Receiver
现在Mainfest中注册一个Reiceiver,当系统受到短信的时候,就可以收到系统广播,知道收到新短信。
添加权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
注册一个Reiceiver :
<receiver
android:name=".SMSReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
二、实现SmsReceiver类
实现SmsReceiver类的OnReceive()方法:
@Override
public void onReceive(Context context, Intent intent) {
if("android.provider.Telephony.SMS_RECEIVED".equals(tIntent.getAction()))
{
messageText="";
Bundle bundle = intent.getExtras();
if(bundle != null)
{
Object[] objArray = (Object[])bundle.get("pdus");
SmsMessage[] Sms = new SmsMessage[objArray.length];
for(int i=0; i<objArray.length; i++)
{
Sms[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);
}
for(SmsMessage currentMessage : Sms)
{
//获取发信人
address = currentMessage.getDisplayOriginatingAddress();
//获取短信内容
messageText += currentMessage.getDisplayMessageBody();
//获取短信时间,这是服务商提供的时间,而不是系统受到短信时的当前时间
time = new Date(currentMessage.getTimestampMillis());
//由于获得的时间是包含年月日,时区信息,所以做个处理,只要小时和分
hourMin = getHourMin(time);
}
}
/*启动弹窗的Activity,这是为了之后介绍的弹窗做准备,不做弹窗就可以不用了~
*Intent popWindowIntent = new Intent(tContext, PopWindowActivity.class);
*popWindowIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
*context.startActivity(popWindowIntent);
*/
}
}