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 安卓应用中实现系统通知的功能了。这个功能可以给用户实时的消息推送和提示,可以让用户方便地了解当前应用程序的状态和提醒。


相关知识:
安卓10怎么找到开发者选项设置呢
开发者选项是一个很重要的功能,它允许用户进行一些高级操作,例如调试和监视应用程序,以及更改系统设置等等。通常情况下,此选项默认情况下是隐藏的,用户需要进行一些步骤才能启用它。在安卓10中,开发者选项也需要用户手动启用才能使用。下面是介绍如何在安卓10中找到
2023-05-23
安卓10 开发者模式的调试
安卓10 开发者模式是一种非常重要的调试工具,它为开发人员提供了一些高级的选项,使得开发人员能够更好地进行开发和调试。在下面的文章中,我将详细介绍安卓10 开发者模式的调试原理和详细步骤。一、调试原理安卓10 开发者模式是一种特殊模式,允许开发人员访问和修
2023-05-23
安卓 项目开发
安卓项目开发是一项大型的工程,需要从几个方面入手,包括基础知识的学习、项目需求分析、开发工具的选择、软件架构设计、编码实现和测试部署等。一、基础知识学习安卓开发需要掌握Java编程语言的基础知识和安卓开发框架的相关知识。Java是安卓开发的编程语言,其基础
2023-05-23
tc简单开发能改变安卓软件吗
TC简单开发是一种安卓应用开发工具,它为开发者提供了一套可视化的开发环境和代码生成工具,旨在帮助开发者快速生成自己的应用程序。TC简单开发具有易用性、高效性和便捷性的特点,受到了广大开发者的喜爱和追捧。那么,TC简单开发能否改变安卓软件呢?下面将从原理和详
2023-05-23
sock5代理的安卓客户端开发
SOCKS5代理是一种网络协议,它可以被用作安全地代理网络连接。这篇文章会介绍如何在安卓设备上开发一个SOCKS5代理客户端。SOCKS5代理的原理SOCKS5代理在网络连接时使用一个中间层来代理连接,这个中间层位于应用程序和网络之间。当应用程序需要访问网
2023-05-23
myeclipse可以开发安卓吗
MyEclipse是一款集成开发环境,它结合了Eclipse平台和WebSphere Studio的许多特性。它是一个功能强大、易于使用、具有定制性的IDE,适用于各种类型的Java开发,包括Web开发、企业应用程序、移动应用程序等。对于开发安卓应用程序来
2023-05-23
开发安卓软件的app有哪些
开发安卓应用的软件有很多,下面我将为您详细介绍一些流行的安卓开发工具及其原理:1. Android StudioAndroid Studio 是 Google 官方推广的一款用于创建 Android 应用的集成开发环境 (IDE)。它基于 IntelliJ
2023-04-28
安卓手机商城app开发
安卓手机商城App开发教程作为一名互联网领域的博主,我非常高兴为您介绍安卓手机商城App的开发原理和详细步骤。本教程将重点介绍安卓商城App的开发流程、工具和技术,帮助您了解整个过程并为您未来的项目打下良好的基础。一、商城App开发概述安卓手机商城App是
2023-04-28
安卓手机app开发定制注意事项
安卓手机app开发定制是一门技术,需要开发者掌握一定的技能和知识。可以分为以下几个步骤:1. 需求分析:在定制安卓手机app前,需要做一个需求分析,根据用户的需求来设计和开发应用程序。这包括应用程序的功能和界面设计等方面。2. 编写代码:确定应用程序的功能
2023-04-28
安卓iso苹果app开发制作
安卓和iOS是目前智能手机市场上占有主导地位的操作系统。而针对这两个操作系统的应用程序开发,主要涉及到两种编程语言:Java和Kotlin(安卓)以及Objective-C和Swift(iOS)。下面将详细介绍如何开发安卓和iOS应用程序。安卓应用程序开发
2023-04-28
安卓app敏捷开发
安卓App敏捷开发教程: 原理和实践详解随着移动互联网的高速发展,安卓App开发需求日益频繁,如何提高开发效率、保证软件质量成为开发团队关注的焦点。敏捷开发作为一种轻量级开发方法响应了这个问题。本文将为您详细介绍安卓App敏捷开发的原理和实践。一、敏捷开发
2023-04-28
eclipse开发安卓app出错
Eclipse 是一个集成开发环境(IDE),它最初是为 Java 开发而设计的。然而,通过扩展和插件,Eclipse 可以支持许多其他编程语言,包括 Android 应用程序的开发。尽管如此,Eclipse 逐渐被 Google 推出的 Android
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1