Android 下的广播简介
在Android下,很多事件需要使用到系统下的广播。例如:你想知道手机电量的变化、是否安装了一个新的程序应用包、扩展介质被移除等信息时。Android广播分为两个方面:广播发送者和广播接收者,通常情况下BroadcastReceiver指的是广播接收者(广播接收器)。
要使广播生效必须先注册广播,实现注册就是告诉系统:要监听什么广播,和监听到之后要做什么动作完成什么工作(自定义广播重写onReceive)。
注册广播
注册广播有两种方式:
1、动态注册(在代码中注册):
通过代码手工注册。当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。动态注册必须在程序运行状态下才能接收广播。
2、静态注册(在AndroiMainfest.xml中配置):
Android不能自动销毁该类广播接收器,也就是说当应用程序关闭后,还是会接收广播。
本文主要讲解动态注册,静态注册可参考:《Delphi XE开发 Android 开机自动启动》
请注意,某些应用(或功能)只能使用静态注册方式。
重写onReceive方法
当我们完成广播的注册后,需要重写onReceive方法中去实现事件发生后的处理过程(本例仅发送一个本地通知)。
监听手机屏幕点亮
源码Demo请下载:http://download.csdn.net/detail/tanqth/9891016
该源码事例仅做了手机屏幕点亮的测试,大家可以根据这个代码完成自己需要的实用功能。
主要代码展示
1、建立广播处理类
TScanBroadcastReceiver = class(TJavaLocal, JFMXBroadcastReceiverListener)
1
public
// 重写广播接收事件
procedure onReceive(context: JContext; intent: JIntent); cdecl;
end;
1
2
3
4
5
2、广播接收后的处理
// 广播接收
procedure TScanBroadcastReceiver.onReceive(context: JContext; intent: JIntent);
var
action: String;
MyNotification: TNotification;
begin
action := JStringToString(intent.getAction);
// 判断广播事件
if action = RES_ACTION then
begin
if not Form2.Visible then Form2.Show;
TThread.Synchronize(nil,
procedure
begin
Form2.Memo1.Lines.Add(‘内容:屏幕点亮’);
end);
//实现本地通知
//本地通知详细技术可查看 http://blog.csdn.net/tanqth/article/details/73739313 【文章】
//或 https://item.taobao.com/item.htm?id=536584650957 【代码】
MyNotification := Form2.NotificationCenter1.CreateNotification;
try
MyNotification.Name := ‘新通知’;
MyNotification.Title := ‘屏幕点亮’;
MyNotification.AlertBody :=‘TEST’;
MyNotification.Number:=18;
Form2.NotificationCenter1.PresentNotification(MyNotification);
finally
MyNotification.Free;
end;
end;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
动态注册
// 创建接收者
FListener := TScanBroadcastReceiver.Create();
if not Assigned(FListener) then
Exit;
FReceiver := TJFMXBroadcastReceiver.JavaClass.init(FListener);
if not Assigned(FReceiver) then
Exit;