• Android 监听SMS短信


    当设备接收到一条新的SMS消息时,就会广播一个包括了android.provider.Telephony.SMS_RECEIVED动作的Intent

    注意,这个动作是一个字符串值,SDK 1.0不再包括对这个字符串的引用。因此,在你的应用程序中。你须要显式的指定它。

     

    对于应用程序监听SMS Intent广播,首先须要加入RECEIVE_SMS权限。通过在应用程序manifest中加入一个uses-permission,如以下的片段所看到的:

     

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

     

    SMS广播Intent包括了新来SMS的细节。为了提取包装在SMS广播IntentBundle中的SmsMessage对象数组,使用pdus key来提取SMS pdus数组。当中。每一个对象表示一个SMS消息。将每一个pdu字节数组转化成SmsMessage对象,调用SmsMessage.createFromPdu,传入每一个字节数组,如以下的片段所看到的:

     

    Bundle bundle = intent.getExtras();

    if (bundle != null) {

    Object[] pdus = (Object[]) bundle.get(“pdus”);

    SmsMessage[] messages = new SmsMessage[pdus.length];

    for (int i = 0; i < pdus.length; i++)

    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

    }

     

    每一个SmsMessage对象包括SMS 消息的细节,包括源地址(手机号),时间和消息体。

     

    以下的样例演示了一个Broadcast Receiver实现了onReceive函数来检查新来的短信是否以@echo字符串開始。假设是,发送同样的文本给那个手机:

     

    public class IncomingSMSReceiver extends BroadcastReceiver

    {

    private static final String queryString = “@echo “;

    private static final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

     

    public void onReceive(Context _context, Intent _intent)

    {

    if (_intent.getAction().equals(SMS_RECEIVED))

    {

    SmsManager sms = SmsManager.getDefault();

    Bundle bundle = _intent.getExtras();

    if (bundle != null)

    {

    Object[] pdus = (Object[]) bundle.get(“pdus”);

    SmsMessage[] messages = new SmsMessage[pdus.length];

    for (int i = 0; i < pdus.length; i++)

    messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

    for (SmsMessage message : messages)

    {

    String msg = message.getMessageBody();

    String to = message.getOriginatingAddress();

    if (msg.toLowerCase().startsWith(queryString))

    {

    String out = msg.substring(queryString.length());

    sms.sendTextMessage(to, null, out, null, null);

    }

    }

    }

    }

    }

    }

     

    为了监听短信,使用Intent Filter来注冊Broadcast Receiver,使其监听android.provider.Telephony.SMS_RECEIVED动作。如以下的片段所看到的:

     

    final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

    IntentFilter filter = new IntentFilter(SMS_RECEIVED);

    BroadcastReceiver receiver = new IncomingSMSReceiver();

      registerReceiver(receiver, filter);
  • 相关阅读:
    PostgreSQL 9.6.2版本在centOS下的安装和配置
    postgreSQL 创建user表时引发的表名大写与双引号问题
    Go JSON嵌套解析失败
    面试杂谈:面试程序员时都应该考察些什么?<转>
    Golang bash脚本自动创建一个go工程
    iOS Debug心得 (持续更新)
    iOS 上传APP到AppStore 卡在 Authenticating with the iTunes store 提示
    iOS 应用打包 设备兼容性问题(Build Active Architecture Only)
    Go 使用自定义包(package)
    Go 连接PostgreSQL数据库
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5130518.html
Copyright © 2020-2023  润新知