每天进步一点-----全局大喇叭Broadcast

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button forceOffline = (Button) findViewById(R.id.force_offline);
        forceOffline.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(
                        "com.example.broadcastbestpractice.FORCE_OFFLINE");
                sendBroadcast(intent);
            }
        });
    }

}
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.WindowManager;

public class ForceOfflineReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
        dialogBuilder.setTitle("Warning");
        dialogBuilder.setMessage("You are forced to be offline. Please try to login again.");
        dialogBuilder.setCancelable(false);
        dialogBuilder.setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCollector.finishAll();
                        Intent intent = new Intent(context, LoginActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);
                    }
                });
        AlertDialog alertDialog = dialogBuilder.create();
        alertDialog.getWindow().setType(
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        alertDialog.show();
    }

}
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.broadcastbestpractice"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6
 7     <uses-sdk
 8         android:minSdkVersion="14"
 9         android:targetSdkVersion="17" />
10
11     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
12
13     <application
14         android:allowBackup="true"
15         android:icon="@drawable/ic_launcher"
16         android:label="@string/app_name"
17         android:theme="@style/AppTheme" >
18         <activity
19             android:name=".LoginActivity"
20             android:label="@string/app_name" >
21             <intent-filter>
22                 <action android:name="android.intent.action.MAIN" />
23
24                 <category android:name="android.intent.category.LAUNCHER" />
25             </intent-filter>
26         </activity>
27         <activity android:name=".MainActivity" >
28         </activity>
29
30         <receiver android:name=".ForceOfflineReceiver" >
31             <intent-filter>
32                 <action android:name="com.example.broadcastbestpractice.FORCE_OFFLINE" />
33             </intent-filter>
34         </receiver>
35     </application>
36
37 </manifest>

本地广播:

  前面我们发送和接收的广播全部都是属于系统全局广播,即发出的广播可以被其他任何 的任何应用程序接收到,并且我们也可以接收来自于其他任何应用程序的广播。这样就很容 易会引起安全性的问题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的程序不停地向我们的广播接收器里发送各种垃圾广播。 为了能够简单地解决广播的安全性问题,Android引入了一套本地广播机制,使用这个 机制发出的广播只能够在应用程序的内部进行传递,并且广播接收器也只能接收来自本应用 程序发出的广播,这样所有的安全性问题就都不存在了。

package com.example.broadcasttest;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private IntentFilter intentFilter;

    private LocalReceiver localReceiver;

    private LocalBroadcastManager localBroadcastManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(
                        "com.example.broadcasttest.LOCAL_BROADCAST");
                localBroadcastManager.sendBroadcast(intent);
            }
        });
        intentFilter = new IntentFilter();
        intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
        localReceiver = new LocalReceiver();
        localBroadcastManager.registerReceiver(localReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        localBroadcastManager.unregisterReceiver(localReceiver);
    }

    class LocalReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "received local broadcast",
                    Toast.LENGTH_SHORT).show();
        }

    }

}
时间: 2024-08-08 17:39:24

每天进步一点-----全局大喇叭Broadcast的相关文章

第五章 全局大喇叭,详解广播机制

我们晓得的是网络通信中一个IP地址段最大的IP地址为广播地址.例如,某个网路的IP地址为192.168.0.XXX,他的子网掩码为255.255.255.0,那么这个网络的IP地址为192.168.0.255. Android也有相应的广播机制,本章将详细介绍相关细节. 1.广播机制简介 Android的广播机制由广播.广播接收器(Broadcast Receiver)和广播发送的内容组成: 每个应用程序都可以对自己感兴趣的广播进行注册,这意味着该程序只会接受自己"感兴趣"的广播内容:

Android develop tricks——整理自国外的一些Blog

ViewDragHelper --视图拖动是一个比较复杂的问题.这个类可以帮助解决不少问题.如果你需要一个例子,DrawerLayout就是利用它实现扫滑.Flavient Laurent 还写了一些关于这方面的优秀文章. PopupWindow--Android到处都在使用PopupWindow ,甚至你都没有意识到(标题导航条ActionBar,自动补全AutoComplete,编辑框错误提醒Edittext Errors).这个类是创建浮层内容的主要方法. Actionbar.getThe

android小技巧(不定期更新)

国内转自http://androidperformance.com/ 国外 http://blog.danlew.net/about/ Activity.startActivities()) 常用于在应用程序中间启动其他的Activity. TextUtils.isEmpty()) 简单的工具类,用于检测是否为空 Html.fromHtml()) 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spanna

Android中那些让你相见恨晚的类-接口-方法

Part 1: Activity.startActivities() 常用于在应用程序中间启动其他的Activity. TextUtils.isEmpty() 简单的工具类,用于检测是否为空.(可同时判断""和null哦) Html.fromHtml() 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spannable 来替换 Html.fromHtml),但是它对渲染从 web 上获取的文字还

50、转自知乎上android开发相见恨晚的接口

原文链接:http://www.zhihu.com/question/33636939 程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?修改 Android(Java)开发中,有哪些方法或类(接口)很实用,但是你却没能在第一时间知道它?当有一天你发现它时,只想说一句:“What the f**k,还有这个!”修改 举报 添加评论分享• 邀请回答 按投票排序按时间排序 28 个回答 赞同123反对,不会显示你的姓名 Roc

BroadcastReceiver牛刀小试

本节引言 本节我们将来学习Android四大组件中的第三个:BroadcastReceiver(广播接收者),嘿嘿,刚一直在想 如何写开头语,于是乎翻了手头的两本Android基础书,发现两本书都没有对BroadcastReceiver的介绍, 不知道是巧合还是作者觉得这东西用得不多,没必要讲!不过,他们不讲,小猪却会讲,还要详细讲咧! 好的,开始本节内容~ PS:对了,在Android官网上,点开API Guides -> App Components也没发现有BroadcastReceive

【转】Android--广播BroadcastReceiver

原文网址:http://www.cnblogs.com/plokmju/p/android_broadcastreceiver.html 前言 Android四大组件,Activity.Service.ContentProvider.BroadcastReceiver,除了BroadcastReceiver之外,其他的在之前的博客中都有讲解到.那么,这篇博客主要讲讲BroadcastReceiver的内容. 本文主要涉及以下几个内容: 什么是BroadcastReceiver Broadcast

3.2 光照篇(1)

http://book.51cto.com/art/201104/255654.htm 3.2   光照篇(1) 大家之所以能够看到东西,主要是因为物体上有光进入大家的眼睛,无论这个光的来源如何.假若,一个物体自身并不发光而且不反射任何光线,那么把它放到最强的阳光下你也看不到什么.因此,OpenGL中既要设置光线性质,又要设置物体的反射性质(告诉OpenGL,光线如何进入我们的眼睛). 1.光线的分类及设置 OpenGL中的光主要有以下4种:自发光.环境光(ambient).散射光(diffus

Android开发贴士集合

Activity.startActivities()——对于从app流的中部启动会非常好. TextUtils.isEmpty()——一个普遍适用的简单工具类. Html.fromHtml()——格式化Html的快速方法,本人认为它也不是非常快,所以我不是经常用它(我说不经常用它是为了重点突出这句话:请多手动构建Spannable来替换Html.fromHtml),但是它对渲染从web上获取的文字还是很不错的. TextView.setError()——在验证用户输入的时候用户体验很不错. Bu