Broadcast众所周知就是广播,这里就拿短信接收做个简单的学习
广播分为静态注册和动态注册两种方式,下面是静态注册只需要在AndroidManifest.xml中添加如下代码
<receiver android:name=".SmsRecevier">
<intent-filter android:priority="1000"> 将优先级设到最大
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
这里不做详细解释,重点学习下动态注册Broadcast原因是动态注册的优先级永远高于静态注册的优先级,如果要进行一些截获操作的话必须要动态,还有就是为了怕乱,学习一种就行了
动态注册要添加的代码如下:
case R.id.regist:
recevier = new SmsBroadcast();
IntentFilter filter = new IntentFilter(ACTION);
filter.setPriority(Integer.MAX_VALUE);//设置优先级最大
registerReceiver(recevier, filter);
isregiset = true;
Toast.makeText(MainActivity.this, "注册成功", 0).show();
break;
case R.id.unregist:
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset = false;
Toast.makeText(MainActivity.this, "解注册成功", 0).show();
} else{
Toast.makeText(MainActivity.this, "尚未注册", 0).show();
}
SmsBroadcast.java如下:
package com.nantian.broadcast;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsBroadcast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.v("TAG", "SmsRecevier onReceive");
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
if (pdus != null && pdus.length > 0) {
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for (SmsMessage message : messages) {
String content = message.getMessageBody();// 得到短信内容
String sender = message.getOriginatingAddress();// 得到发信息的号码
if (sender.equals("10001")) {
abortBroadcast();// 中止发送
Log.e("TAG", "此号码为黑名单号码,已拦截!");
Log.e("TAG", content);
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendContent = format.format(date) + ":" + sender + "--"
+ content;
Log.e("TAG", sendContent);
}
}
}
}
}
下面我们注册之后打印日志:
02-11 16:50:58.559: V/TAG(30319): SmsRecevier onReceive
02-11 16:50:58.579: E/TAG(30319): 此号码为黑名单号码,已拦截!
02-11 16:50:58.689: E/dalvikvm(30319): GC_CONCURRENT freed 147K, 7% free 8404K/8967K, paused 4ms+13ms, total 40ms
02-11 16:50:58.709: W/System.err(30319): Invalid int: ""
02-11 16:50:58.709: E/TAG(30319): 2014-02-11 16:50:55:10001----------呵呵,笑一笑十年少。新上市手机火热预订中,可享多重好礼,详情点击查看www.bjdxkf10000.com/m/index.asp。
拦截成功
最后不要忘记加上这个权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->