赞
踩
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
//在该方法中实现广播接收者的相关操作
@Override
public void onReceive (Context context, Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//实例化广播接收者
MyReceiver receiver = new MyReceiver();
//实例化过滤器并设置要过滤的广播
String action = "android.provider.Telephony.SMS_RECEIVED";
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(action);
registerReceiver(receiver,intentfilter);//注册广播
}
protected void onDestroy() {
super.onDestroy();
//当Activity销毁时,取消注册
unregisterReceiver(receiver);
}
<?xml version="1.0" encoding="utf-8"?>
<manifest ………. >
<application ……… >
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
</receiver>
</application>
</manifest>
Android系统提供了两种广播类型,有序广播和无序广播,开发者可根据需求为程序设置不同的广播类型。
//动态注册MyReceiver广播
MyReceiver one = new MyReceiver ();
IntentFilter filter = new IntentFilter();
filter.setPriority(1000);
filter.addAction("Intercept_Stitch");
registerReceiver(one,filter);
有序广播,它的广播方法有两个:
第一个方法的形式为:
sendOrderedBroadcast(Intent, String)
第二个方法的形式为:
public abstract void sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)
initialCode
结果码的初始值,通常为Activity.RESULT_OK
.initialData
结果数据的初始值,通常为null
.initialExtras
附加结果的初始值,通常为null
.abortBroadcast ()
来标记所接收的有序广播不再传递下去,如果sendOrderedBroadcast
中指定了最后接收者的话,该广播还会再传递给该最后接收者。clearAbortBroadcast ()
通过调用getResultCode ()
,可以获取上一个接收者传递过来的结果码;
通过调用getResultData ()
,可以获取上一个接收者传递过来的结果数据,通常为null
;
通过调用getResultExtras (boolean makeMap)
,可以获取到上一个接收者传递过来的附加数据,参数如果为true
,表示如果没有传递来的附加数据,会自动创建一个空的Map
,参数如果为false
,表示如果没有传递过来的附加数据,只返回null,不会创建新的Map
通过调用setResult (int code, String data, Bundle extras)
,改变有序广播中的结果码、结果数据和附加结果;
通过调用setResultCode (int code)
设置结果码,该参数通常为RESULT_CANCELED
和 RESULT_OK
;
通过调用setResultData (String data)
,改变广播的结果数据;
通过调用setResultExtras (Bundle extras)
会取代广播中原有的附加数据
调用isOrderedBroadcast ()
判断收到的广播是否是顺序广播
sendBroadcast(Intent, String)
或者sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
的时候,可以指定一个权限参数。只有在manifest中已经获得该权限的接收者可以接收到该广播。sendBroadcast(new Intent("com.example.NOTIFY"),Manifest.permission.SEND_SMS);
//指定一个存在的系统权限,也可以使用<permission>自定义一个权限
<uses-permission android:name="android.permission.SEND_SMS"/>
registerReceiver(BroadcastReceiver, IntentFilter, String, Handler)
或者在 manifest的<receiver>
标签中),那么只有那些在manifest
中使用<uses-permission>
来获取该权限的广播者采用向接收者发送广播意图。<receiver android:name=".MyBroadcastReceiver"
android:permission="android.permission.SEND_SMS">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
registerReceiver(receiver, filter, Manifest.permission.SEND_SMS, null );
<uses-permission android:name="android.permission.SEND_SMS"/>
sendOrderedBroadcast()
发送广播,而无序广播使用sendBroadcast()
方法发送广播。//通过intent.getAction()方法获取广播事件的动作,并将其与"android.intent.action.NEW_OUTGOING_CALL"进行比较,
//以判断是否接收到了NEW_OUTGOING_CALL广播事件
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.NEW_OUTGOING_CALL")) {
// 处理NEW_OUTGOING_CALL广播事件
}
}
}
<Activity>
<Broadcast>
<receiver>
<broadcastreceiver>
<receiver>
。<receiver>
节点用于声明一个广播接收器(BroadcastReceiver
),用于接收和处理广播事件。在<receiver>
节点中,可以指定广播接收器的类名、优先级、过滤器等属性。android_intent.action.NEW_OUTGOING_CALL
sendStickyBroadcast(Intent intent)
方法发送。这种广播适用于需要在广播发送后,后续注册的广播接收器也能接收到广播事件的场景。sendBroadcast(Intent intent)
方法发送。这种广播适用于只希望已经注册的广播接收器能接收到广播事件的场景。
- 需要注意的是,常驻型广播可能会增加系统负担,因为即使没有注册的广播接收器,系统仍然会将广播事件保存在内存中,直到有广播接收器注册为止。因此,应谨慎使用常驻型广播,避免对系统性能产生不必要的影响。
Context.sendBroadcast(Intent)
方法发送。Context.sendOrderedBroadcast(Intent, String)
方法发送。在有序广播中,每个接收者可以调用abortBroadcast()
方法中断广播的传递,这样后续的接收者将无法接收到该广播。而在无序广播中,接收者之间是独立的,一个接收者的操作不会影响其他接收者。
< uses-permission android:name=android.permission.CALL_PHONE/>
< uses-permission android:name=android.permission.SEND_SMS />
< uses-permission android:name=android.permission.RECEIVE_BOOT_COMPLETED />
< uses-permission android:name=android.intent.action.BATTERY_LOW/>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。