雪月圣雕 发表于 2019-11-4 12:38:54

Broadcast

广播使Android的四大组件之一,但也不算太难。
        发送广播需要使用Intent()方法与sendBroadcast()方法:
                Intent intent = new Intent(
                                "com.example.broadcastbestpractice.FORCE_OFFLINE");
                               sendBroadcast(intent);
        而接收广播则需要创建广播接收器的类:
                广播接收器继承BroadcastReceiver,并在其onReceive()方法中实现接收广播后我们想要进行的具体逻辑操作。
                class ForceOfflineRecevier extends BroadcastReceiver{
              @Override
              public void onReceive(final Context context, Intent intent) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(context);//使用AlertDialog.Builder构建对话框
                builder.setTitle("Warning");
                builder.setMessage("You are forced to be offline. Please try to login again.");
                builder.setCancelable(false);//使用setCancelable设置对话框不可取消
                   builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        //使用setPositiveButton来给对话框注册确定按钮
                        @Override
                        public void onClick(DialogInterface dialogInterface, int which) {
                          ActivityCollector.finishALL();//销毁所有活动
                          Intent i = new Intent(context,LoginActivity.class);
                          context.startActivity(i);//重新启动LoginActivity
                        }
                    });
                    builder.show();
              }
                    }
        那么广播接收器具体是如何接收发来的广播呢?:
                获取一个过滤器实例,使用addAction()为其添加一个action,这个action就是广播信号。
                再获取接收器实例,使用registerReceiver(接收器实例,过滤器实例)对该广播接收器进行动态注册,此时广播接收器就可以真正接收广播信息了。
                一般将该方法写于onCreate()或onResume()方法中:
                        protected void onResume() {
                                       // 重写了onResume用来注册ForceOfflineRecevier
                              super.onResume();
                              IntentFilter intentFilter = new IntentFilter();//获取过滤器实例
                              intentFilter.addAction("com.example.broadcastbestpractice.FORCE_OFFLINE");
                              receiver = new ForceOfflineRecevier();
                              registerReceiver(receiver,intentFilter);//使receiver具备接收
                              // com.example.broadcastbestpractice.FORCE_OFFLINE广播的功能
                            }
                不要忘记在onPause()或者onDestory()方法中写上取消注册方法:
                        unregisterReceiver(receiver);

策马啸西风 发表于 2019-11-5 08:47:25

好吧,感觉不是很看得懂
页: [1]
查看完整版本: Broadcast