delphi安卓开发使用系统通知

在 Delphi 安卓开发中,系统通知是一个非常重要的功能,它可以让用户在使用应用程序时及时获得重要的提醒和信息。本文将会介绍 Delphi 安卓开发中使用系统通知的原理和详细操作流程。

一、系统通知的概念与分类

系统通知,就是在 Android 手机的状态栏上显示的提醒信息,包括通知标题、通知内容和通知图标等。通知一般包括两种类型:可清除和不可清除。可清除的通知是指通过用户的手动操作,可以清除掉该通知;而不可清除的通知则需要等到特定条件满足或被处理才能消除。

二、使用原理

通过 Delphi 调用 Android 系统 API,可以实现系统通知的功能。系统通知主要分为两部分:通知栏消息和后台服务。其中通知栏消息是负责在手机通知栏上显示提示信息,而后台服务则需要运行一个 Service 来维护通知的生命周期以及处理后续操作。

三、详细操作流程

以下是 Delphi 安卓开发中使用系统通知的详细操作流程:

1. 添加权限

首先需要在 AndroidManifest.xml 文件中添加以下权限:

```

//震动权限

//开机启动权限

//保持唤醒权限

//辅助功能权限

//通知权限

```

2. 创建 Service

创建一个 Service,用于定时检测并发送通知。代码如下:

```

unit MyService;

interface

uses

System.SysUtils, System.Classes, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,Androidapi.JNI.Os,Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.NotificationManagerCompat,Androidapi.JNI.Notification,FMX.Platform.Android;

type

TMyService = class(TAndroidService)

procedure AndroidServiceCreate(Sender: TObject);

procedure AndroidServiceStartCommand(const Sender: TObject;

const Intent: JIntent; Flags, StartId: Integer; var StopService: Boolean);

private

{ Private 宣言 }

public

{ Public 宣言 }

end;

var

MyService: TMyService;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}

{$R *.dfm}

procedure TMyService.AndroidServiceCreate(Sender: TObject);

begin

// TODO: 繝味Λ繝��繝。繝シ繧ク繝」繝�繝ォ繧貞叙蠕励∈TAndroidService縺ョ譌・莠亥クコ螻樊€�

end;

procedure TMyService.AndroidServiceStartCommand(const Sender: TObject;

const Intent: JIntent; Flags, StartId: Integer; var StopService: Boolean);

var

NotificationManager: JNotificationManager;

Builder: JNotificationCompat_Builder;

Notification: JNotification;

Title, Content: JString;

begin

NotificationManager := TJNotificationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE));

//创建Notification.Builder

Title := StringToJString('测试Notification');

Content := StringToJString('这个是一条测试Notification消息');

Builder := TJNotificationCompat_Builder.JavaClass.init(TAndroidHelper.Context);

Builder.setSmallIcon(TAndroidHelper.Context.getApplicationInfo().icon);

Builder.setContentTitle(Title);

Builder.setContentText(Content);

Builder.setTicker(Content);

//设置意图

Builder.setContentIntent(nil);

Builder.setAutoCancel(True);

//发声或震动

Builder.setDefaults(TJNotification.JavaClass.DEFAULT_ALL);

//启动通知

Notification := Builder.build();

NotificationManager.notify(0, Notification);

//自毁

StopService := True;

end;

end.

```

3. 创建 BroadcastReceiver

创建一个 BroadcastReceiver 来接收系统通知的操作,代码如下:

```

unit NotificationClickReceiver;

interface

uses

System.SysUtils,System.Types,System.UITypes,System.Classes,Androidapi.JNI.GraphicsContentViewText,

Androidapi.JNI.JavaTypes,Androidapi.JNI.Os,Androidapi.Helpers,Androidapi.JNIBridge,Androidapi.JNI.App,

Androidapi.JNI.NotificationManagerCompat,Androidapi.JNI.Notification,FMX.Platform.Android,

System.Notification;

type

TNotificationClickReceiver = class(TJavaLocal, JFMXBroadcastReceiverListener)

public

procedure onReceive(Context: JContext; Intent: JIntent); cdecl;

end;

var

NotificationClickReceiver: TNotificationClickReceiver;

implementation

procedure TNotificationClickReceiver.onReceive(Context: JContext; Intent: JIntent);

var

NotificationManager: JNotificationManager;

Notification: JNotification;

begin

if not Assigned(NotificationManager) then

NotificationManager := TJNotificationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE));

if not Assigned(Notification) then

Notification := TJNotification.Wrap((Intent.getParcelableExtra(TJNotification.JClass.EXTRA_NOTIFICATION) as IParcelable).GetObjectID);

NotificationManager.cancel(Notification.contentIntent.requestCode);

end;

end.

```

4. 为 Service 注册 BroadcastReceiver

在 Service 的 AndroidServiceCreate 方法中注册 BroadcastReceiver:

```

procedure TMyService.AndroidServiceCreate(Sender: TObject);

var

LReceiver: JFMXBroadcastReceiver;

begin

inherited;

LReceiver := TJFMXBroadcastReceiver.JavaClass.init;

LReceiver.setListener(NotificationClickReceiver);

LReceiver.addAction(TJNotificationManager.JavaClass.ACTION_NOTIFICATION_CLICKED);

TJLocalBroadcastManager.JavaClass.getInstance(TAndroidHelper.Context).registerReceiver(LReceiver, TJLocalBroadcastFilter.JavaClass.init(TJNotificationManager.JavaClass.ACTION_NOTIFICATION_CLICKED));

end;

```

5. 在主界面中启动 Service

在主界面代码中启动 Service:

```

uses

MyService;

procedure TForm1.Button1Click(Sender: TObject);

begin

TAndroidHelper.Context.StartService(TAndroidHelper.JavaServiceClass(TMyService));

end;

```

6. 发送系统通知

在 Service 中发送系统通知,代码如下:

```

NotificationManager := TJNotificationManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.NOTIFICATION_SERVICE));

//创建Notification.Builder

Title := StringToJString('测试Notification');

Content := StringToJString('这个是一条测试Notification消息');

Builder := TJNotificationCompat_Builder.JavaClass.init(TAndroidHelper.Context);

Builder.setSmallIcon(TAndroidHelper.Context.getApplicationInfo().icon);

Builder.setContentTitle(Title);

Builder.setContentText(Content);

Builder.setTicker(Content);

//设置意图

Builder.setContentIntent(nil);

Builder.setAutoCancel(True);

//发声或震动

Builder.setDefaults(TJNotification.JavaClass.DEFAULT_ALL);

//启动通知

Notification := Builder.build();

NotificationManager.notify(0, Notification);

```

通过以上步骤,就可以在 Delphi 安卓应用中实现系统通知的功能了。这个功能可以给用户实时的消息推送和提示,可以让用户方便地了解当前应用程序的状态和提醒。


相关知识:
安卓8
安卓8.0,全名Android O(Oreo),是谷歌公司推出的移动操作系统。在2017年3月份,Android O推出了首个开发者预览版,为安卓开发者提供了体验和试用的机会。本文将介绍安卓8.0开发者预览版的一些重要特性和更新。一、通知渠道在安卓8.0中
2023-05-23
安卓 聊天软件 开发
聊天软件是一种现代的通信工具,借助于互联网技术,使人们可以在任何时候、任何地点发送信息。安卓聊天软件的开发比较复杂,需要熟悉多种技术。本文将介绍安卓聊天软件的开发原理和详细步骤。1.开发环境准备首先要安装安卓开发环境(Android Studio),并下载
2023-05-23
myeclipse的安卓开发环境
MyEclipse是一个集成开发环境(IDE),主要用于Java及Web开发。它包含了一些著名的插件,如Struts库、Hibernate、Spring等,这些插件可以帮助开发者更加高效、优雅的完成开发工作。除此之外,MyEclipse还支持Android
2023-05-23
ipad安卓开发
iPad和安卓是现在市场份额最大的平板电脑操作系统。如果你想学习开发这两种操作系统,你需要了解它们的基本工作原理和开发方式。以下是对iPad和安卓开发的详细介绍:1. iPad开发原理iPad是由苹果公司开发的平板电脑操作系统。在iPad上开发应用程序需要
2023-05-23
eclipse中开发安卓出错
Eclipse 是一个优秀的集成开发环境,可以用来进行 Android 应用程序的开发,但是在开发过程中,很容易出现各种各样的错误,给程序员带来麻烦。本文将详细介绍一些在 Eclipse 中开发 Android 应用程序时可能会出现的常见错误以及如何解决这
2023-05-23
开发课程表app官方安卓版
在这篇文章中,我们将从原理到实际操作来详细介绍如何开发一个课程表应用程序(App)的官方安卓版本。安卓应用程序开发是一种直接为安卓设备创建应用程序的过程。以用户为导向的界面、高度可定制的功能和高效率的运行是一个成功的安卓应用程序的标志。一、游刃有余地掌握安
2023-04-28
安卓日历提醒app开发
安卓日历提醒app可以帮助用户记录和提醒重要的日程和事件。以下是实现该功能的一些原理和详细介绍:1. Android系统的日历APIAndroid系统提供了日历API,可以让开发者方便地访问用户设备上的日历信息。开发者可以使用这个API来创建、读取、更新和
2023-04-28
安卓app开发测试流程
安卓app开发测试流程一般分为以下几个阶段:1.需求分析阶段在这个阶段,测试人员需要参与需求讨论,对产品功能进行理解和分析,确保测试用例能够覆盖到产品的每一个细节和功能。测试人员需要了解用户的实际需求,以便编写出更有针对性的测试用例。2.测试计划阶段测试计
2023-04-28
安卓app小工具开发
安卓app小工具开发(原理或详细介绍)在安卓系统中,App 小工具(App Widget)是一种轻量级的应用组件,它可以嵌入在用户的主屏幕或其他 App 中,提供实时更新的信息并允许用户进行简易操作。在本教程中,我们将详细介绍如何构建一个简单的安卓 App
2023-04-28
哈尔滨开发安卓app
哈尔滨,作为中国东北的重要城市,具有一定的软件开发能力。安卓app(应用)开发是当下比较热门的技术方向之一。本文将为您详细介绍安卓app的开发原理及过程。一、安卓系统简介安卓(Android)是一种基于Linux平台的开源移动操作系统,由谷歌(Google
2023-04-28
java开发安卓app用什么软件
Java开发Android App的开发环境一般包括以下几个软件:1. JDK:Java Development Kit,是开发Java语言程序的基础工具包,包含Java语言的核心类库、JVM、Java编译器等。Android应用程序开发也依赖于JDK环境
2023-04-28
app开发定制安卓版apk下载
定制安卓版apk下载,主要是为了满足用户的特定需求而进行的定制。以下是实现这一需求的原理和详细介绍。1. 原理定制安卓版apk下载,其实就是在原有的应用程序基础上,针对用户的特定需求进行二次开发。二次开发通常包括修改界面UI、增加或删除功能、更改应用程序的
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1