您的位置:首页 > 其它

Broadcast广播

2016-07-15 19:10 162 查看

Broadcast广播

广播 生命周期只有十秒左右

从[调用对象—实现onReceive—结束]

广播要创建一个类,继承BroadcastReceiver

在继承类重写 onReceive(Context context, Intent intent)

<intent-filter><action>
事件:


android.intent.action.MEDIA_UNMOUNTED :监听SD卡拔出

android.intent.action.BOOT_COMPLETED :开机启动

注意,一定要加上权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />


android.intent.action.NEW_OUTGOING_CALL :手机拨号

注意,一定要加上权限

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />


android.intent.action.PACKAGE_ADDED” : 监听安装

android.intent.action.PACKAGE_REMOVED” :监听卸载

<data android:scheme="package" /> :获得安装卸载的数据


BroadcastReceiver代码:
@Override
public void onReceive(Context context, Intent intent) {
// 获得监听 用来判断 是安装还是卸载
String listener = intent.getAction();

if ("android.intent.action.PACKAGE_ADDED".equals(listener)) {
// intent.getData().toString() 获得卸载包名
System.out.println(intent.getData().toString() + "已安装");

} else if ("android.intent.action.PACKAGE_REMOVED".equals(listener)) {
System.out.println(intent.getData().toString() + "已卸载");
}


BroadcastReceiver 有序与无序

有序

按照接收者的优先级顺序接收广播,优先级别在intent-filter中的priority中声明,-1000到

1000之间,值越大,优先级越高.可以终止广播意图的继续传播.接收者可以篡改内容.效率慢

无序

发送一个广播,所以监听该广播的广播接收者都可以监听到该广播。

无序广播 sendBroadcast(Intent intent)

自定义Broadcast

启动发送 sendBroadcast(intent);//无序广播

用Intent.setAction(“send”);自己建立频道

把自建频道写入到 <action android:name="自建频道" />

<receiver android:name=".sendBroadcastContent">
<intent-filter>
<action android:name="自建频道"></action>
</intent-filter>


有序广播

sendOrderedBroadcast(Intentintent,StringreceiverPermission,BroadcastReceiverresultReceiver,Handler scheduler, int initialCode, StringinitialData,BundleinitialExtras)

参数:

intent:意图

receiverPermission:接收方

resultReceiver:结果接收器 //new新建广播不用再AndroidManifest.xml声明,此参数监视最后广播得到的内容getResultData()

scheduler:调度器

initialCode:检测码

initialData:广播数据内容

initialExtras:临时增加捆绑

用Intent.setAction(“send”);自己建立频道

String data = getResultData(); 获得广播数据内容

setResultData(String); 篡改数据内容

abortBroadcast();拦截广播,将不再进行广播

把自建频道写入到 <action android:name="自建频道" />
设置优先级 <intent-filter android:priority="1000"/> 设置优先级 1000至-1000

<receiver android:name=".ShengBroadcast">
<!-- android:priority="1000" 设置优先级 1000至-1000 -->
<intent-filter android:priority="1000">
<action android:name="自建频道"></action>
</intent-filter>
</receiver>


在android里面有一些产生非常频繁的广播事件,在清单文件里面配置是不会生效.电量变化 屏幕锁屏/解锁 这些广播事件只能利用代码注册.

android.intent.action.SCREEN_OFF 屏幕锁定

android.intent.action.SCREEN_ON 屏幕解锁

<receiver android:name=".ScreenStatus">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"></action>
<action android:name="android.intent.action.SCREEN_ON">s</action>
</intent-filter>
</receiver>


// 接收广播
public class ScreenStatus extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
System.out.println("Action:" + action);
}
}


public class MainActivity extends AppCompatActivity {
private ScreenStatus status;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//自建的广播接收器
status = new ScreenStatus();
//意图过滤器
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.SCREEN_OFF");
filter.addAction("android.intent.action.SCREEN_ON");
//注册广播
registerReceiver(status, filter);

}

//销毁避免错误信息显示
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(status);
status = null;
}
}


手机屏蔽返回键

调用Main方法 onBackPressed():屏蔽返回键,去掉return便可

www.grepcode.com

查询旧版本源代码网站

无法快捷键出来,必须手输入,高版本已被隐藏掉
android.provider.Telephony.SMS_RECEIVED
注意,一定要加上权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />

短信接收监听

//短信的数据是pdu的数据,必须对短信的格式很了解才可以解析短信.
Object[] objs = (Object[]) intent.getExtras().get("pdus");
for(Object obj : objs){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
String body = smsMessage.getMessageBody();
String sender = smsMessage.getOriginatingAddress();
System.out.println("body"+body);
System.out.println("sender"+sender);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息