首页 > 学院 > 开发设计 > 正文

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

2019-11-08 00:17:48
字体:
来源:转载
供稿:网友

效果

代码

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>

。。。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表