BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog
来源:互联网 发布:网络上游初始化失败 编辑:程序博客网 时间:2024/06/05 14:17
MainActivity如下:
main.xml如下:
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;@Overrideprotected 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() {@Overridepublic 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);}}}@Overrideprotected 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{@Overridepublic 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>
1 0
- BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog
- BroadcastReceiver广播接收者(五)——onReceive()中的耗时任务以及短信窃听
- Android在广播接收者中弹出对话框
- Android广播中弹窗 BroadcastReceiver Dialog
- Android基础——广播接收者BroadcastReceiver
- 四大组件 — BroadCastReceiver广播接收者
- BroadcastReceiver广播接收者(三)——利用广播在应用程序之间传递数据
- 广播接收者(BroadcastReceiver)
- 广播接收者--BroadcastReceiver
- android 广播接收者--BroadcastReceiver
- android 广播接收者--BroadcastReceiver
- 广播接收者(BroadcastReceiver)
- (转)广播接收者BroadcastReceiver
- 广播接收者--BroadcastReceiver
- 广播接收者--BroadcastReceiver
- Android 广播接收者--BroadcastReceiver
- 广播接收者--BroadcastReceiver
- 广播接收者-BroadcastReceiver
- 匿名管道
- HTTP权威指南 总结
- [Android学习日记]2014.07.24
- [Android学习日记]2014.07.27
- java.lang.RuntimeException: java.lang.reflect.InvocationTargetException和java.lang.NoClassDefFoundErr
- BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog
- 有“空洞”的文件的C代码实现
- 赛后打脸 - ACdream原创群赛(18)のAK's dream 简单题总结
- mysql 按照条件导出数据
- [Android学习日记]2014.07.28
- HDOJ 题目1864 最大报销额(01背包)
- linux 多线程应该注意的问题
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd
- oracle基础