BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog

MainActivity如下:

package cc.cv;

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.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
 * Demo描述:
 * 1 本地广播LocalBroadcast使用完整示例
 * 2 在广播的onReceive()方法中弹出Dialog
 *
 * 本地广播的特点:
 * 1 本地广播只能在本App中传播,并且广播接收器也只能接收来自本APP发出的广播.
 *   所以在该情况下可防止其他应用获取广播中的敏感数据从而确保数据安全.
 *
 * 2 本地广播只能使用在代码中动态注册的方式.
 *   因为静态注册主要是为了让程序在未启动的情况下也能收到广播.在发送本地广播
 *   时,我们的App肯定是已经启动了,因此也完全不需要使用静态注册.否则,这个本地
 *   广播也没什么特点了.
 *
 *
 * 注意事项:
 * 在广播的onReceive()方法中弹出Dialog
 * 1 给Dialog设置Type
 *   dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
 * 2 注意权限
 *   <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
 *
 *
 * 参考资料:
 * http://blog.csdn.net/guolin_blog
 * Thank you very much
 */
public class MainActivity extends Activity {
	private Button mButton;
	private Intent mIntent;
	private Context mContext;
	private IntentFilter mIntentFilter;
    private LocalBroadcastManager mLocalBroadcastManager;
	private LocalBroadcastReceiver mLocalBroadcastReceiver;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mContext=this;
		mButton=(Button) findViewById(R.id.button);
		mButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				registerLocalBroadcastReceiver();
				sendLocalBroadcast();
			}
		});
	}

	/**
	 * 注册本地广播接收者
	 */
	private void registerLocalBroadcastReceiver(){
		mIntentFilter=new IntentFilter("test_action");
		mLocalBroadcastReceiver=new LocalBroadcastReceiver();
		mLocalBroadcastManager=LocalBroadcastManager.getInstance(mContext);
		mLocalBroadcastManager.registerReceiver(mLocalBroadcastReceiver, mIntentFilter);
	}

	/**
	 * 发送本地广播
	 */
	private void sendLocalBroadcast(){
		mIntent=new Intent("test_action");
		mIntent.putExtra("number", "9527");
		mLocalBroadcastManager.sendBroadcast(mIntent);
		//发送广播后取消本地广播的注册
		unRegisterLocalBroadcastReceiver();
	}

	/**
	 * 取消本地广播的注册
	 */
	private void unRegisterLocalBroadcastReceiver(){
		if (mLocalBroadcastManager!=null) {
			if (mLocalBroadcastReceiver!=null) {
				mLocalBroadcastManager.unregisterReceiver(mLocalBroadcastReceiver);
			}
		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		unRegisterLocalBroadcastReceiver();
	}

}

LocalBroadcastReceiver如下:

package cc.cv;

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

public class LocalBroadcastReceiver extends BroadcastReceiver{
	@Override
	public void onReceive(Context context, Intent intent) {
		String message=intent.getStringExtra("number");
		showDialogInBroadcastReceiver(context, message);
	}

	/**
	 * 在广播的onReceive()方法中弹出Dialog
	 * 1 给Dialog设置Type
	 *  dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
	 * 2 注意权限
	 *  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
	 */
	private void showDialogInBroadcastReceiver(Context context,String message){
		Builder builder=new Builder(context);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle("Title");
        builder.setMessage(message);
        builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int arg1) {
            	dialog.dismiss();
            }
        });
        Dialog dialog=builder.create();
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        dialog.show();
	}

}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="发送本地广播" />

</RelativeLayout>

时间: 2024-10-12 20:49:37

BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog的相关文章

普通广播接收者和有序广播接收者

普通广播接收者和有序广播接收者 接收者的操作和普通情况下一样 在有序情况下,优先级不相同的情况下先执行优先级高的,优先级相同的情况下先执行先在Manifest中注册的. 无序的话顺序是任意的.

BroadcastReceiver广播接收者(六)——粘性广播(StickyBroadcast)使用示例

MainActivity如下: package cc.com; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.Intent; /** * Demo描述: * 粘性广播(StickyBroadcast)使用示例 * 粘性广播也叫等待广播. * * 使用场景: * 发送一个粘性广播(StickyBroadcast),但是现在并没

广播接收者 BroadcastReceiver 示例-2

BaseActivity /**所有Activity的基类*/ public class BaseActivity extends Activity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         ActivityCollector.addActivity(this);     }     @Ov

Android中广播接收者BroadcastReceiver详解

1. 接收系统的广播步骤 (1)  新建一个类继承BroadcastReceiver 以监听sd卡状态的广播接收者为例 1 public class SdCardBroadcastReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 String action = intent.getAction(); 6 if("android

广播接收者BroadCast的认识

BroadCast用于接收其他程序或者本身发出的系统级别的通知 分为标准广播和有序广播 又分为动态注册和静态注册 动态注册: 首先新建一个类用于接收广播(即广播接收者)的类,该类继承BroadCatReceiver类,并且重写onReceiver方法,收到广播后的各种逻辑就是在该方法里面编写,在onCreate()方法里面回去IntentFilter实例,并且添加广播的指令,然后获取BroadCastReciver类的实例,然后利用registerReciver()方法进行广播的注册, @Ove

广播接收者(Broadcast Receiver)

独立寒秋,湘江北去,橘子洲头. -–毛泽东<沁园春·长沙> 广播 广播类型 有序广播 无序广播 特殊的广播接收者 注册广播接收者的两种方式 系统广播示例 接收系统发送的广播 示例-短信到来 自定义无序广播示例 创建广播 接收广播方式静态注册 接收广播方式代码注册 自定义有序广播示例 发送有序广播 接收有序广播 有序广播结果 特殊的广播接收者-锁屏等等 广播 听广播要有:电台 收音机 音乐广播 Android系统内部已经定义好了电台 ,也已经定义好了一些广播事件 比如外拨电话 短信到来 SD卡状

Android广播的使用(自定义广播和本地广播)

1>自定义广播 //定义接收器public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"接收我的广播",Toast.LENGTH_LONG).show(); }} ·//注册事件 <receiver android:name=&quo

广播接收者

一.广播发送者&广播接收者介绍 1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据: 广播意图就是通过Context.sendBroadcast(Intent intent)或Context.sendOrderedBroadcast(Intent intent)发送的意图,通过这个语

Android入门:广播发送者与广播接收者

参考: Android入门:广播发送者与广播接收者 - xiazdong - CSDN博客http://blog.csdn.net/xiazdong/article/details/7768807 一.广播发送者&广播接收者介绍 1.广播接收者 广播接收者简单地说就是接收广播意图的Java类,此Java类继承BroadcastReceiver类,重写: public void onReceive(Context context,Intent intent),其中intent可以获得传递的数据: