Android广播基础了解(非有序)
来源:互联网 发布:后窗解析知乎 编辑:程序博客网 时间:2024/06/13 11:26
Android广播监听系统广播(这里以系统电量变化举例,其他广播监听也可以这样实现)
一、广播的基本流程:
1、建立广播。
2、添加过滤器。
3、注册广播。
4、发送广播。(如果系统广播,系统会发送,在接收广播处理处添加代码即可)
5、接收广播并处理。
6、注销广播:(这个要么注册、注销各一次,先注册,后注销。或者是成对出现,成对出现也要遵循先注册后注销)
二、具体步骤:
1、广播创建:(接收处理代码也在此处)
//代码创建广播 可以监听系统广播和自定义sendBroadcast的广播
/* create BroadcastReceiver */
private BroadcastReceiver mBatInfoReceiver=new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
/* 如果捕捉到的action是ACTION_BATTERY_CHANGED,
* 就执行onBatteryInfoReceiver() */
if (Intent.ACTION_BATTERY_CHANGED.equals(action))
{
intLevel = intent.getIntExtra("level", 0);
intScale = intent.getIntExtra("scale", 100);
onBatteryInfoReceiver(intLevel,intScale); //监听到广播后的处理方式 这个可以根据需求来自己写
}
}
};
2、添加过滤器,注册广播:
/* 注册几个系统 BroadcastReceiver,作为访问电池计量之用 */
//广播的过滤,注册广播
registerReceiver ( mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED) );
3、发送广播:
由于Android电量变化是系统广播,此处不用添加sendBroadcast(intent i);代码的实现。
4、处理广播在1中实现。
5、注销广播 :
unregisterReceiver(mBatInfoReceiver); //与注册广播成对使用
如果多个动作要监听可以这样实现:
IntentFilter filter = new IntentFilter();
filter.addAction(“hi.hello”);
filter.addAction(“hello.world”);
registerReceiver(mBatInfoReceiver, filter);
然后通过sendBroadcast(intent i);发送广播
比如: Intent intent1 = new Intent(“hi.hello”);
sendBroadcast(intent1);
Intent intent2 = new Intent(“hello.world”);
sendBroadcast(intent2);
相关代码:(该代码是网上找的demo,忘记了出处,贴出来做参考)
package irdc.ex06_02;
/* import相关class */
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class EX06_02 extends Activity
{
/* 变量声明 */
private int intLevel;
private int intScale;
private Button mButton01;
private AlertDialog d;
//代码创建广播
/* create BroadcastReceiver */
private BroadcastReceiver mBatInfoReceiver=new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
/* 如果捕捉到的action是ACTION_BATTERY_CHANGED,
* 就执行onBatteryInfoReceiver() */
if (Intent.ACTION_BATTERY_CHANGED.equals(action))
{
intLevel = intent.getIntExtra("level", 0);
intScale = intent.getIntExtra("scale", 100);
onBatteryInfoReceiver(intLevel,intScale); //监听到广播后的处理方式 这个可以根据需求来自己写
}
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/* 加载main.xml Layout */
setContentView(R.layout.main);
/* 初始化Button,并设定按下后的操作 */
mButton01 = (Button)findViewById(R.id.myButton1);
mButton01.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
/* 注册几个系统 BroadcastReceiver,作为访问电池计量之用 */
//广播的过滤
registerReceiver ( mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED) );
}
对应的广播接收代码添加多几个判断即可。
});
}
/* 拦截到ACTION_BATTERY_CHANGED时要执行的method */
public void onBatteryInfoReceiver(int intLevel, int intScale)
{
/* create 弹出的对话窗口 */
d = new AlertDialog.Builder(EX06_02.this).create();
d.setTitle(R.string.str_dialog_title);
/* 将取得的电吕计量显示于Dialog中 */
d.setMessage(getResources().getString(R.string.str_dialog_body)+
String.valueOf(intLevel * 100 / intScale) + "%");
/* 设定返并加画面的按钮 */
d.setButton(getResources().getString(R.string.str_button2),
new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
/* 反注册Receiver,并关闭对话窗口 */
unregisterReceiver(mBatInfoReceiver); //与注册广播成对使用
d.dismiss();
}
});
d.show();
}
}
Android广播代码简单实现:(以点击按钮,成功发送一个广播为例)
一、Android广播基本流程是:
1、建立广播。
2、添加过滤器。
3、注册广播。
4、发送广播。
5、接收广播并处理。
6、注销广播。
二、具体实现。
1、建立广播:复写onReceive,通过 intent.getAction();获取接收到的广播。此广播可以是系统广播或者自定义广播。
private String msg="bc.bc.lin";
private BroadcastReceiver myBroadCast=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
intent.getAction();
if(msg.equals(intent.getAction()))
{
System.out.println("success BCTEST");
}
}
};
2、添加过滤器:此处可以添加多个动作。用filter.addAtion()方法。
IntentFilter filter = new IntentFilter();
filter.addAction(msg);
3、注册广播:
registerReceiver(myBroadCast, filter ); //确保注册广播和销毁广播只执行一次,或只是先后执行成对出现。不然会报错。
4、发送广播:
Intent i=new Intent(msg);
sendBroadcast(i);
6、注销广播:一般在onDestroy()中处理。
unregisterReceiver(myBroadCast);
System.out.println("UnRegister BCTEST");
简单代码:
package com.example.mybroadcast;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button btnSendBC=null;
private String msg="hi.hello.bc";
private BroadcastReceiver myBroadCast=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
intent.getAction();
if(msg.equals(intent.getAction()))
{
System.out.println("success BCTEST");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSendBC=(Button)findViewById(R.id.btnSendBroadCast);
IntentFilter filter = new IntentFilter();
filter.addAction(msg);
registerReceiver(myBroadCast, filter );
System.out.println("Register BCTEST"); //确保注册广播和销毁广播只执行一次,或只是先后执行成对出现。不然会报错。
//本代码中在onDestory ()中注销广播。
btnSendBC.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(msg);
sendBroadcast(i);
System.out.println("send BCTEST");
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
unregisterReceiver(myBroadCast);
System.out.println("UnRegister BCTEST");
super.onDestroy();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Android广播在 AndroidManifest.xml文件中 添加过滤器:(以应用程序要开机自启动为例)
开机自启动主要是监听到Android开机完成的广播"android.intent.action.BOOT_COMPLETED"
代码如下:
1、主文件代码:
package com.example.healthp;
import com.example.healthp.MainActivity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
/**
* 开机自启动类
*/
public class BootBroadcastReceiver extends BroadcastReceiver {
//如果监听到开机完成广播后,用intent 跳转到相应的Activity 或者做相应的代码处理。
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
// MainActivity m=new MainActivity();
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION))
{
Intent intentHello=new Intent();
intentHello.setComponent(new ComponentName(context,MainActivity.class));
intentHello.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentHello);
}
}
}
2、在Android AndroidManifest.xml文件中 的Application 标签域内添加红色字体的广播注册
<application
*****
*****
<receiver android:name="com.example.healthp.BootBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
********
*****
</application>
说明:
com.example.healthp 为BootBroadCastReceive.java文件所在的包名
android.intent.action.BOOT_COMPLETED 过滤开完成广播
Android 广播官方网址 http://developer.android.com/reference/android/content/BroadcastReceiver.html
0 0
- Android广播基础了解(非有序)
- Android--广播接收者(发送有序广播)
- android广播,有序广播介绍
- 43.android广播-有序广播
- Android有序广播(系统有序广播SMS)
- Android笔记(二):有序广播
- android有序广播
- Android有序广播OrderedBroadcast
- android-BroadcastReceiver有序广播
- Android 发送有序广播
- Android-发送有序广播
- Android之有序广播
- Android实践:有序广播
- Android 发送有序广播
- Android -----有序广播
- Android有序广播
- Android有序广播
- [Android]有序广播是如何实现有序循环(五)
- Sql Server中表数据的复制和克隆
- ASP.NET 添加验证控件导致Button点击事件无法触发
- poj 3278 队列+bfs
- POJ2155 Matrix 二维树状数组的应用
- C++ new函数的背后
- Android广播基础了解(非有序)
- Jamendo在线音乐播放器
- ant执行.class文件
- 实时分布式搜索引擎比较(senseidb、Solr、elasticsearch)
- 黑马程序员_Java基础[13]_final、抽象类
- javafx之新建窗口和启动另外一个程序
- vmWare10安装gentoo备忘
- 记住
- HDU 3412 & poj 3778 An Odd Award Rule