Android 开发之接收系统广播(动态和静态)
白羽 2018-06-27 来源 :网络 阅读 707 评论 0

摘要:本文将带你了解Android 开发之接收系统广播(动态和静态),希望本文对大家学Android有所帮助。





1、标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎会在同一时刻接收到这条广播信息,它们之间没有先后顺序。效率高、无法被截断。

2、有序广播:是一种同步执行的广播,在广播发出后,同一时刻只会有一个广播接收器能够接收到这条广播,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递。

  这种广播有先后顺序,优先级高的广播接收器就可以先接收到广播,并且前面的广播接收器可以截断正在传播的广播。

3、动态注册广播:在主代码中直接注册。

4、创建广播接收器:新建一个类,让它继承自BroadcastReceiver,并重写父类的onReceive()方法。有广播到来时,onReceive()方法中就会得到执行,具体逻辑就写在这个方法中。

5、在onCreate()方法中使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 方法进行动态注册,第一个参数传入创建的类的实例,第二个参数传入IntentFilter的实例。

6、下面的代码实现网络状态的监听:

 

public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");  //action中的值是要监听的系统广播
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver,intentFilter);       //用registerReceiver()方法进行注册,分别传入自定义类的实例和意图实例    }
 
    //动态注册的广播接收器一定要取消注册,使用unregisterReceiver()方法取消注册
    protected void onDestory(){
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }
    //自定义一个类继承自BroadcastReceiver,并重写他的onReceive()方法
    class NetworkChangeReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent){
            Toast.makeText(context,"network changes",Toast.LENGTH_SHORT).show(); 
       }
   } 
}

 

7、最后要在AndroidManifest.xml中声明权限,否则程序会直接崩溃。注意:中间那行才是申请权限,

   package="example.com.broadcasttest">

    

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 

    <application> </application>

 8、模拟器的API要大于等于24才能运行以上代码。仔细、仔细、仔细!!!!千万不要写错单词

 

 

 

9、静态注册广播:在AndroidManifest中注册,不必启动程序就能实现接收广播。

10、以下代码实现接收开机广播:在包名上右键,New—Other—Broadcast Receiver,更改广播接收器的名字,勾选Exported和Enabled。这两个属性分别代表广播接收器接收本程序意外的广播和是否启用这个广播接收器。

 

package example.com.broadcasttest;
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;
public class BootCompleteReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"Boot Complete",Toast.LENGTH_SHORT).show();
    }
}
 
 
   <!--应用可以监听该广播,成为自启动权限,但是会拖慢开机速度-->
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 
 
  
 
 
     <receiver
            android:name=".BootCompleteReceiver"
            android:enabled="true"
            android:exported="true">
            <!--由于系统启动后会发出一条值为"android.intent.action.BOOT_COMPLETED"的广播,所以在下面的标签中添加了action-->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

 

10、onReceive()方法中写需要实现的逻辑,但是不要在这方法中写太多逻辑或者进行任何耗时的操作,因为广播接收器中是不允许开启线程的,当方法中运行了较长时间而没有结束,程序就会报错。

 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程