• Android之BroadcastReceiver 监听系统广播


    绑定广播有两种方式

    一.配置文件绑定,在程序未启动也能监听

    二.代码方式绑定,在程序启动后才能监听

    1.绑定和取消绑定广播

    public class MainActivity extends Activity {
        private Button registerButton=null;
        private Button unRegisterButton=null;
        private SMSReceiver smsReceiver=null;
        private static final String SMS_ACTION="android.provider.Telephony.SMS_RECEIVED";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            registerButton=(Button)findViewById(R.id.registerButton);
            unRegisterButton=(Button)findViewById(R.id.unRegisterButton);
            
            registerButton.setOnClickListener(new RegisterReceiverListener());
            unRegisterButton.setOnClickListener(new UnRegisterReceiverListener());
            /*if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }*/
        }
        
        class RegisterReceiverListener implements OnClickListener
        {
            @Override
            public void onClick(View v) {
                System.out.println("registerReceiver");
                //生成一个BroadcastReceiver对象
                smsReceiver=new SMSReceiver();
                //生成一个IntentFilter对象
                IntentFilter filter=new IntentFilter();
                //为IntentFilter添加一个Action
                filter.addAction(SMS_ACTION);
                MainActivity.this.registerReceiver(smsReceiver, filter);
            }
        }
        class UnRegisterReceiverListener implements OnClickListener
        {
            @Override
            public void onClick(View v) {
                System.out.println("unregisterReceiver");
                MainActivity.this.unregisterReceiver(smsReceiver);
            }
        }

    2.广播类

    package com.example.mars_1800_broadcastreceiver02;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.gsm.SmsMessage;
    
    public class SMSReceiver extends BroadcastReceiver{
    
        @Override
        public void onReceive(Context context, Intent intent) {
            System.out.println("receive message");
            
            //接收Intent对象当中的数据
            Bundle bundle=intent.getExtras();
            //在Bundle对象中有一个属性为pdus,该属性为Object数组
            Object[] myOBJpdus=(Object[])bundle.get("pdus");
            //创建一个SmsMessage类型的数组
            SmsMessage[] messages=new SmsMessage[myOBJpdus.length];
            System.out.println(messages.length);
            for (int i = 0; i < myOBJpdus.length; i++) {
                //使用Object数组中的对象创建SmsMessage对象
                messages[i]=SmsMessage.createFromPdu((byte[])myOBJpdus[i]);
                //获取到信息对象的内容
                System.out.println(messages[i].getDisplayOriginatingAddress());
                System.out.println(messages[i].getDisplayMessageBody());
            }
        }
    }

    3.加入相应权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.mars_1800_broadcastreceiver02"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="19" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.mars_1800_broadcastreceiver02.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!-- <receiver android:name="SMSReceiver" >
                <intent-filter>
                    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
                </intent-filter>
            </receiver> -->
        </application>
        <!--  接收短信广播则一定有加入相应的权限 -->
        <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    </manifest>
  • 相关阅读:
    【BZOJ2553】[BeiJing2011] 禁忌(AC自动机+矩乘)
    自动生成logo的网址
    JS创建对象的方式有几种
    用nodejs和js写增删查模块
    JS一般般的网页重构可以使用Node.js做些什么(转)
    Javascript高级程序设计
    前端书籍小技巧
    【年终总结】2年计划还是要有的,万一实现了呢?(转自叶小钗)
    前端数据结构与算法系列(转)
    node前端自动化
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3650078.html
Copyright © 2020-2023  润新知