安卓使用BroadcastReceiver监听接受短信信息


效果


代码

1.SmsReceiverTest

package com.javen.devicemange.CrazyOne.broadcast;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.javen.devicemange.R;

/**
 * Created by Administrator on 2017/2/24 0024.
 * 使用BroadcastReceiver监听接受短信信息
 */

public class SmsReceiverTest extends AppCompatActivity implements View.OnClickListener {
    private Button listener;
    private static SmsReceiverTest smsReceiverTest;
    private TextView messageAddress;
    private TextView message_address;
    private TextView messageBody;
    private TextView message_body;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.smsreceivertest);
        initView();
        //activity中创建一个静态类成员变量 instance,onCreate方法的最后,将this赋值给instance
        smsReceiverTest = this;

    }
    //获取本类对象
    public static SmsReceiverTest getSingleInstance() {
        return smsReceiverTest;
    }


    private void initView() {
        listener = (Button) findViewById(R.id.listener);

        listener.setOnClickListener(this);
        messageAddress = (TextView) findViewById(R.id.messageAddress);
        messageAddress.setOnClickListener(this);
        message_address = (TextView) findViewById(R.id.message_address);
        message_address.setOnClickListener(this);
        messageBody = (TextView) findViewById(R.id.messageBody);
        messageBody.setOnClickListener(this);
        message_body = (TextView) findViewById(R.id.message_body);
        message_body.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.listener:
                break;
        }
    }


}

2.SmsReceiver

package com.javen.devicemange.CrazyOne.broadcast;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.TextView;

import com.javen.devicemange.R;

/**
 * Created by Administrator on 2017/2/24 0024.
 * 使用BroadcastReceiver监听接受短信信息
 *  <--授予程序接受短信的权限-->
 <uses-permission android:name="android.permission.RECEIVE_SMS"/>
 */
public class SmsReceiver extends BroadcastReceiver { private TextView message_address; private TextView message_body; String originatingAddress; private StringBuilder stringBuilder; @Override public void onReceive(Context context, Intent intent) { //进行信息匹配,这个if判断语句可以不写 if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { //中止广播,不让系统短信息接受到广播 //abortBroadcast(); Log.d("GsonUtils", "MessageBroadcastReceiver_onReceive"); stringBuilder = new StringBuilder(); //接受短信sms传递过来的数据 Bundle bundle = intent.getExtras(); //判断是否有数据 if (null != bundle) { //通过pdus可以获得接受到所有的短信消息 Object[] pdus = (Object[]) bundle.get("pdus"); //构建短信对象array,并依据收到的对象长度来创建数组的长度大小 SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } //获取接收短信的电话号码 originatingAddress = messages[0].getOriginatingAddress(); Log.d("GsonUtils", "originatingAddress=" + originatingAddress); for (int i = 0; i < messages.length; i++) { SmsMessage message = messages[i]; //获取短信的内容 String messageBody = message.getMessageBody(); //将短信的内容拼接起来 stringBuilder.append(messageBody); } } Log.d("GsonUtils", "MessageBody=" + stringBuilder.toString()); //在广播接收者(BroadcastReceiver)中刷新界面UI效果 SmsReceiverTest.getSingleInstance().runOnUiThread( new Runnable() { @Override public void run() { message_address = (TextView) SmsReceiverTest.getSingleInstance().findViewById(R.id.message_address); message_address.setText(originatingAddress); message_body = (TextView) SmsReceiverTest.getSingleInstance().findViewById(R.id.message_body); message_body.setText(stringBuilder.toString()); } } ); } }}

AndroidManifest.xml

<!--授予程序接受短信的权限-->
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<application
    android:name=".App"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.Light">
    <activity
        android:name=".CrazyOne.broadcast.SmsReceiverTest"
        android:configChanges="orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>

            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <!--通过清单文件注册广播-->
    <!--指定短信接受者BroadcastReceiver的优先级为1000-->
    <receiver android:name=".CrazyOne.broadcast.SmsReceiver">
        <intent-filter android:priority="1000">
            <action android:name="android.provider.Telephony.SMS_RECEIVED">
            </action>
        </intent-filter>
    </receiver>

布局xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <Button
        android:id="@+id/listener"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开启监听短信到来的广播"/>
    <TextView
        android:id="@+id/messageAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="短信发过来的号码"
        android:textColor="#0f0"/>
    <TextView
        android:id="@+id/message_address"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="#000"/>
    <TextView
        android:id="@+id/messageBody"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="短信发过来的内容信息"
        android:textColor="#f00"/>
    <TextView
        android:id="@+id/message_body"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textColor="#000"/>

</LinearLayout>

。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值