求职简历网 > 知识 >

android广播大全

来源:求职简历网时间:2024-04-08 18:56:06编辑:皮带君

. Android引入广播机制的用意?

从MVC的角度考虑(应用程序内)
其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过 是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一 种补充关系,引入广播机制可以方便几大组件的信息和数据交互。
b:程序间互通消息(例如在自己的应用程序内监听系统来电)
c:效率上(参考UDP的广播协议在局域网的方便性)
d:设计模式上(反转控制的一种应用,类似监听者模式)
转自:http://www.cnmsdn.com/html/201101/1295431222ID9251.html


android 类中的 广播怎么使用

首先根据广播应用内接收和应用外接收,分类管理 LocalBroadcastManager,应用内广播管理类 BroadcastManager 广播管理类(部分应用内,应用外) 广播接收类实现的两种方式代码生成类,并注册在AndroidManifest.xml 文件中配置广播接收类消息发送的两种方式Normal broadcast,通过Context.sendBroadcast 发送,接口器不按照顺序,异步处理Ordered broadcasts,通过Context.sendOrderedBroadcast发送,由于每个接收器依次执行时,它可以传播的结果到下一个接收器,或者它可以完全中止该广播,以便它不会被传递给其他接收者。排列顺序为接收器的优先级。

Android中的常驻型广播和非常驻型广播的区别

广播分为常驻型广播(静态注册的广播)和非常驻型广播,所谓的常驻型广播是在xml中注册的,当appBack退出后,还能够接收到其他app发送的广播;而非常驻型广播,广播接收者是随着Activity的生命周期创建而创建,销毁而销毁的。
广播又分为有序广播和正常广播,有序广播是有优先级priority的-1024---1024,数字越大优先级越高,其中动态注册的广播的优先级总是高于静态注册得优先级,不管静态注册的广播优先级有多高。


android怎么发送特定广播的?

起一个线程,每发一个广播后就sleep一分钟,如此循环。(或者接受系统的timechanged这个广播,这个广播好像一分钟发一次)。

Android 在发送广播时的方法 sendBroadcast(Intent)。

①:Intent myIntent = new Intent();——【创建Intent对象】

②:myIntent.setAction(String)——【设置一般的要执行的动作。参数:动作一个动作的名称,如ACTION_VIEW。应用程序的具体行动,应与供应商的包名作为前缀。】

③:myIntent.putExtra(String,Object)——【广播中额外发送的数据,String为自定义key,Object表示多种数据类型】

④:sendBroadcast(myIntent);——【发送广播】


接收广播

Android在接收广播的方法是注册一个广播接收器 registerReceiver(MyReceiver,IntentFilter)。

①:首先创建MyReceiver类(类名自定义) 继承 BroadcastReceiver类。——【创建广播接收器】

②:在MyReceiver中重写public void onReceive(Context context, Intent intent)方法。这个方法在接收到广播后触发。——【重写处理方法】

③:在Activity或者Service启动时 onCreate()、onStartCommand()等方法中实例化 MyReceiver类——【启动时实例化广播接收器】

④:IntentFilter filter = new IntentFilter();——【创建IntentFilter对象 意图过滤器】

⑤:filter.addAction(String);——【在过滤器中加入过滤条件,说明接收什么广播】

⑥:registerReceiver(cmdReceiver, filter);——【注册广播,参数为(广播接收器,意图过滤器)】


如何理解Android BroadcastReceiver 方法onReceive的参数intent

onReceive(...)是BroadcastReceiver的方法,当系统接收到intent broadcast时,就会被调用到。

intent可以来自于sendBroadcast(Intent intent, String receiverPermission),比如,你有一个service,你需要在某些情况下向前台发送消息,就可以调用这个API,通过intent.put...可以附加很多参数。App实现一个BroadcastReceiver来接收intent,取出参数进一步处理,这是情景之一;

intent也可以来自于系统广播,比如你希望获得地理位置的更新,通常需要编写下述代码,LocationManager在将来某个时点帮忙发送某种类型的Intent,然后你就可以从intent中拿到地理位置数据了,这也是情景之一:

mLocationManager.requestLocationUpdates(provider, 0, 0, PendingIntent pi);

public class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取包含地理位置信息的intent
Location loc = (Location) intent.getParcelableExtra(LocationManager.KEY_LOCATION_CHANGED);
......
}
}


如何理解Android BroadcastReceiver 方法onReceive的参数intent

onReceive(...)是BroadcastReceiver的方法,当系统接收到intent broadcast时,就会被调用到。

intent可以来自于sendBroadcast(Intent intent, String receiverPermission),比如,你有一个service,你需要在某些情况下向前台发送消息,就可以调用这个API,通过intent.put...可以附加很多参数。App实现一个BroadcastReceiver来接收intent,取出参数进一步处理,这是情景之一;

intent也可以来自于系统广播,比如你希望获得地理位置的更新,通常需要编写下述代码,LocationManager在将来某个时点帮忙发送某种类型的Intent,然后你就可以从intent中拿到地理位置数据了,这也是情景之一:

mLocationManager.requestLocationUpdates(provider, 0, 0, PendingIntent pi);

public class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 获取包含地理位置信息的intent
Location loc = (Location) intent.getParcelableExtra(LocationManager.KEY_LOCATION_CHANGED);
......
}
}


android 注册广播有多少种方式

有两种注册广播方式:
1.常驻型广播
常驻型广播,当应用程序关闭了,如果有广播信息来,写的广播接收器同样的能接收到,它的注册方式就是在应用程序的AndroidManifast.xml 中进行注册,这种注册方式通常又被称作静态注册。这种方式可以理解为通过清单文件注册的广播是交给操作系统去处理的。示例代码如下:
AndroidManifest.xml中配置广播



<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="spl.broadCastReceiver"
android:versionCode="1"
android:versionName="1.0">

<activity android:name=".BroadCastReceiverActivity"
android:label="@string/app_name">






















2.非常驻型广播
非常驻型广播,当应用程序结束了,广播自然就没有了,比如在 Activity 中的 onCreate 或者 onResume 中注册广播接收者,在 onDestory 中注销广播接收者。这样广播接收者就一个非常驻型的了,这种注册方式也叫动态注册。这种方式可以理解为通过代码注册的广播是和注册者关联在一起的。比如写一个监听 SDcard 状态的广播接收者:
package cn.sunzn.mosecurity.activity;

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.os.Environment;

public class SDcard extends Activity {
SdcardStateChanageReceiver sdcardStateReceiver;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sdcardStateReceiver = new SdcardStateChanageReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MEDIA_REMOVED);
filter.addAction(Intent.ACTION_MEDIA_EJECT);
filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
filter.addDataScheme("file");
registerReceiver(sdcardStateReceiver, filter);
}

protected void onDestroy() {
unregisterReceiver(sdcardStateReceiver);
}

class SdcardStateChanageReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
checkSDCard();
}

public void checkSDCard() {
String state = Environment.getExternalStorageState();
System.out.println(state);
if (state.equals(Environment.MEDIA_REMOVED) || state.equals(Environment.MEDIA_UNMOUNTED)) {
System.out.println("SDCard 已卸载!");
}
}
}
}


12、注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。

注册广播的分类:静态注册和动态注册。静态注册:在清单文件里直接注册,从app开启到app销毁,一直在接收广播,接收广播时间长,但是接收广播的优先级低于动态注册广播。动态注册:动态注册,动态销毁,从onCreate到取消注册,期间接收广播,接收广播时间是短且可控,接收广播的优先级高。例如:发送广播:Intent i = new Intent();i.setAction("ACTION_CLOSE");sendBroadcast(i);接受广播:onCreate(){//注册广播的接受者IntentFilter filter = new IntentFilter();filter.addAction("ACTION_CLOSE_ACTIVITY");receiver = new InnerReceiver();registerReceiver(receiver, filter);}private class InnerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //TODO 当前Activity接收到广播 需要做的事情 } }}//注销广播@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(receiver);}2.引入广播的原因:a) 不同的app之间传信通用b)发出一条指定,需要多个Activity都需要有反应注意:以上仅供参考,如有疑问,请追问,谢谢。

上一篇:黑莓 微信

下一篇:没有了

相关推荐

热门头条