CN113778280B - 一种Linux兼容Android的显示消息通知方法及装置 - Google Patents
一种Linux兼容Android的显示消息通知方法及装置 Download PDFInfo
- Publication number
- CN113778280B CN113778280B CN202111068376.2A CN202111068376A CN113778280B CN 113778280 B CN113778280 B CN 113778280B CN 202111068376 A CN202111068376 A CN 202111068376A CN 113778280 B CN113778280 B CN 113778280B
- Authority
- CN
- China
- Prior art keywords
- message
- application
- notification
- window
- icon
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 76
- 230000008569 process Effects 0.000 claims abstract description 49
- 238000007667 floating Methods 0.000 claims abstract description 24
- 230000006870 function Effects 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 11
- 230000000903 blocking effect Effects 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 6
- 230000004927 fusion Effects 0.000 abstract 1
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/04817—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance using icons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Abstract
本发明公开了一种Linux兼容Android的显示消息通知方法及装置,Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;Linux接收到数据流后,将数据流反序列化后发送给消息处理中心;将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知。实现了在Linux系统上显示Android应用的消息通知,将Android的消息通知和Linux桌面通知完美融合。
Description
技术领域
本发明涉及计算机操作系统领域,尤其涉及一种Linux兼容Android的显示消息通知方法及装置。
背景技术
用户在Linux兼容Android环境中运行使用Android应用时,Android应用的消息通知对用户是非常重要的功能,例如:用户使用微信或QQ App时经常会收到来自好友的消息提醒,这对用户非常重要。针对这种场景,Linux兼容Android环境可以直接使用Android原生的消息提醒功能,但是,使用这种方案有以下三个严重弊端无法解决:
弊端一:Android原生的消息提醒在应用窗口的顶部出现,这会导致每个应用窗口都会出现大量通知,杂乱无章,况且在应用窗口内部出现消息提醒,这与Linux系统体验完全不符。用户需要在应用窗口内下拉顶部的菜单栏才能显示通知内容,这不是桌面操作系统的交互过程,体验极差。
弊端二:在Android兼容环境中每一个应用都占用一个独立的窗口,如果在一个应用窗口内部出现其他应用的消息通知或系统消息,用户点击这些消息通知时,系统没有办法做相应的逻辑处理。
弊端三:目前大部分的消息通知是应用进入后台之后才能够接收到,但是在Android兼容环境中,每一个应用都是一个独立的窗口,所有的应用都在前台,没有应用处于后台,这将导致大部分消息通知无法接收。
发明内容
为了解决如何在Linux兼容Android环境中,获取Android应用的消息通知,及时通知提醒用户的问题,本发明提供了一种Linux兼容Android的显示消息通知方法及装置。
一方面,本发明提供一种Linux兼容Android的显示消息通知方法,所述方法包括如下步骤:
步骤S1:Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
步骤S2:Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
步骤S3:Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
步骤S4:消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知。
进一步地,所述方法在步骤S1之前,还包括:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
进一步地,所述方法中消息通知通过浮窗通知,具体为:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心。
进一步地,所述方法中消息通知在系统通知托盘中闪烁通知,具体为:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
进一步地,所述方法还包括:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
另一方面,本发明提供一种Linux兼容Android的显示消息通知装置,所述装置包括:
存储器,用于存储程序;
处理器,用于执行所述存储器中存储的程序,当所述存储器中存储的程序被执行时,所述处理器用于:
Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知。
进一步地,所述处理器用于:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
进一步地,所述处理器用于:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心。
进一步地,所述处理器用于:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
进一步地,所述处理器用于:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
本发明与现有技术相比,具有以下优点:
实现了在Linux系统上显示Android应用的消息通知,将Android的消息通知和Linux桌面通知完美融合,用户无需区分是移动应用通知还是桌面应用通知,通知展示和操作效果完全一致。
附图说明
图1是本发明实施例提供的一种Linux兼容Android的显示消息通知方法示意图;
图2是本发明实施例提供的一种Linux兼容Android的显示消息通知装置组成示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
对于在Linux操作系统上兼容运行Android的环境来说,Android运行环境是运行在容器中的。
通过容器技术可以在Linux系统运行一个新的Linux系统(包括其他基于Linux系统定制的系统,如Android),容器使得客户机系统和主机系统相互隔离。与传统的基于虚拟机技术的方案不同,在容器技术中,客户系统与主机系统共享CPU、内存、存储等资源,资源开销很低。此外,通过适当的配置,还能使客户系统直接访问主机的硬件资源,进一步提升客户系统的性能。
图1是本发明实施例提供的一种Linux兼容Android的显示消息通知方法示意图;所述方法包括如下步骤:
步骤S1:Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
Android所有通知的显示都是应用主动触发,应用通过NotificationManager的notify接口发送消息,Android系统服务层NotificationManagerService接受到消息通知,取出消息所属的包名、应用名称,因为Linux只需知道有通知消息,不需识别消息内容,故只需将消息的应用包名、应用名称通过接口hasNotification下发到AppService模块(Linux与Android通信的服务层)。
步骤S2:Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
AppService(Android的后台服务进程)根据应用的包名package_name(应用的唯一标识符)查询应用名称,然后将这些信息封装成一个数据结构体Notification:
message Notification{
required string package_name=1;
required string app_name=2;
optional string text=3;
optional int32 win_id=4;
}
其中package_name是应用包名,app_name是应用名称,text是消息内容,win_id是Linux系统上应用的窗口ID。Notification结构体封装好以后,调用protobuffer库(google提供的序列化数据结构的开源库)将Notification数据结构转换成为高效可网络传输的数据流,然后通过unix socket server指定的路径创建一个socket客户端,连接到socket服务端,将序列化后的数据流发送给Linux系统的socket服务端。
步骤S3:Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
本地套接字服务端unix socket server接收到socket客户端的连接请求,阻塞被解除,读取socket客户端发送过来的数据流,将接收到的数据流保存到一个内部缓冲区,然后调用protobuffer库对数据流进行反序列化,让其转换成为可识别的数据结构体Notification。在当前进程里有一个消息处理中心HandlerCenter,专门处理Android系统发过来的各种数据请求,把结构体Notification传递给消息处理中心HandlerCenter,HandlerCenter就知道了Android系统需要Linux系统显示一个消息通知,于是将数据结构体Notification交给专门处理消息通知逻辑的类NotifHandler来处理。
步骤S4:消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知。
消息处理中心HandlerCenter中保存了应用窗口的数据字典WidgetMap,使用键值对的形式保存数据,其中的键和值一一对应,根据键可以快速定位到对应的值,WidgetMap的键保存的是应用的包名package_name,值则保存应用的窗口对象QWiget,这样就可以根据包名package_name快递定位到应用窗口了。消息通知处理逻辑类NotifHandler根据结构体Notification里的应用包名package_name在HandlerCenter对象里查找WidgetMap,就可以快速定位到应用对应的窗口QWidget,调用QWidget的isActive函数可以判断此窗口是否为活跃窗口(焦点窗口),焦点窗口即是用户当前正在操作的窗口,如果是焦点窗口,则不打扰用户,将消息通知丢弃不处理;如果不是焦点窗口,则NotifHandler对象调用show函数执行下面的通知显示流程。
进一步地,所述方法在步骤S1之前,还包括:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
在Linux系统上启动一个后台服务进程,在此服务进程里启动一个unix socketserver(即本地套接字服务端,用于Linux进程间通信),此套接字服务端指定了一个固定路径作为通信桥梁,Android端的进程就可以使用这个固定路径连接上它并发送数据包给这个套接字服务端了;unix socket server启动以后就会等待Android端的进程连接到它,如果没有任何连接,它就一直阻塞,等待连接。当Android端的进程连接上它并向它发送数据包时,阻塞就被解除,继续执行相应的数据处理逻辑。
进一步地,所述方法中消息通知通过浮窗通知,具体为:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心。
具体地,在NotifHandler对象的show函数里,首先初始化一个dbus接口QDBusInterface对象,代码如:
mDBusInterface=std::make_shared<QDBusInterface>(
"org.freedesktop.Notifications",
"/org/freedesktop/Notifications",
"org.freedesktop.Notifications",
QDBusConnection::sessionBus());
说明,dbus是一种Linux系统进程间通信方式,QDBusInterface是QT平台封装的一个dbus接口,专用于dbus通信,QT是一个跨平台的C++应用和UI开发库,org.freedesktop.Notifications是Linux系统内置的专用于处理系统消息的高级API,它提供服务,可通过dbus调用让其处理系统消息。由于Android应用的图标都存放在一个固定路径下,图标的名称以应用包名package_name命名,所以可以根据应用包名package_name来获取通知需要显示的图标,然后将应用名称、图标路径、消息内容、消息超时时间(比如4秒)这些参数打包成一个参数列表QList,通过dbus接口对象QDBusInterface调用org.freedesktop.Notifications的Notify接口,该调用返回一个新消息ID值,将此消息ID值存在一个数据字典PackageMap里,键是package_name,值是消息ID,这样使得消息ID和应用包名package_name一一对应。org.freedesktop.Notifications服务执行了Notify接口后就在系统顶部显示一个浮窗消息,消息显示传过去的应用名称,图标及消息内容,并根据传过去的超时时间(比如4秒)自动关闭,将其显示到系统消息中心里面。
进一步地,所述方法中消息通知在系统通知托盘中闪烁通知,具体为:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
具体地,系统托盘是指系统屏幕右下角的状态栏,其上面显示了一些小图标,闪烁通知是指托盘上面有小图标不停的闪烁,表示此应用有新的通知。NotifHandler里还维护了一个数据字典SystemTrayMap,专门用于存储应用包名与托盘通知的映射关系,使用包名package_name就可以快速定位到该应用的托盘通知。首先根据结构体Notification里的包名package_name在数据字典SystemTrayMap里查找,如果查找到一个该应用的托盘通知对象QSystemTrayIcon,则说明托盘通知存在,只需要调用show函数让其显示出来,然后开启一个定时器,定时器每间隔一定时间(比如600毫秒)超时一次,每次超时都交替显示托盘通知的图标,达到其闪烁的效果。如果根据包名package_name在数据字典SystemTrayMap里没有找到QSystemTrayIcon,则新创建一个托盘图标对象QSystemTrayIcon,将该对象的图标设置为Android app图标,并将此对象加入到数据字典SystemTrayMap里面,同时开启一个定时器,定时器每间隔一定时间(比如600毫秒)超时一次,每次超时都交替显示QSystemTrayIcon的图标,达到托盘图标闪烁的效果。QSystemTrayIcon是一个综合数据的结构体,不仅仅只有图标,还可以包含其他数据。
进一步地,所述方法还包括:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
在显示一个应用窗口QWidget时,QWidget里面保存了应用的包名package_name,当用户关闭应用窗口或切换此窗口为焦点窗口时,根据QWidget里面的package_name在NotifHandler里的数据字典PackageMap里可找到该应用的系统通知ID,通过dbus接口QDBusInterface调用org.freedesktop.Notifications服务的CloseNotification函数并将此通知ID传递给此函数,这个系统通知就会被关闭,将此应用包名package_name从数据字典PackageMap里面移除。然后根据包名package_name在系统托盘数据字典SystemTrayMap里可查找到该应用的托盘对象QSystemTrayIcon,调用此对象的hide函数就会隐藏此托盘图标通知,同时停止它的定时器。
用户点击通知中心的消息,消息自动移除,将应用窗口显示到最上面,置为焦点窗口,并隐藏系统托盘的闪烁通知。
用户点击通知中心的消息时,消息默认的行为是移除,需要将此消息对应的应用窗口显示到屏幕最上面。NotifHandler里保存有一个数据字典NotiIdMap,它的键是通知ID,值是包名package_name,也就是可以根据通知ID定位到它对应的应用包名。点击通知时可以得到此通知的ID,根据此通知ID在数据字典NotiIdMap里查找到对应的应用包名package_name,使用包名package_name在窗口数据字典WidgetMap里查找到对应的应用窗口QWidget,调用QWidget对象的raise函数便将此窗口显示到最上层,再调用activateWindow函数使此窗口成为焦点窗口。然后根据包名package_name在系统托盘数据字典SystemTrayMap里查找到该应用的托盘通知对象QSystemTrayIcon,调用此对象的hide函数就隐藏了此托盘通知,同时停止它的定时器。
用户点击系统托盘的闪烁通知,移除通知中心的相关消息,将应用窗口显示到最上面,将其置为焦点窗口,并隐藏系统托盘的闪烁通知。
托盘通知对象QSystemTrayIcon里保存了此通知的应用包名package_name,当点击此托盘通知时使用包名package_name在通知数据字典PackageMap里可找到该应用的系统通知ID,通过dbus接口QDBusInterface调用org.freedesktop.Notifications服务的CloseNotification函数并将此通知ID传递给此函数,此系统通知就会被关闭。使用包名package_name在窗口数据字典WidgetMap里查找到对应的应用窗口QWidget,调用QWidget对象的raise函数便将此窗口显示到最上层,再调用QWidget的activateWindow函数使此窗口成为焦点窗口。然后根据包名package_name在系统托盘数据字典SystemTrayMap里查找到该应用的托盘对象QSystemTrayIcon,调用此对象的hide函数就隐藏了此托盘通知,同时停止它的定时器。
图2是本发明实施例提供的一种Linux兼容Android的显示消息通知装置组成示意图;所述装置包括:
存储器,用于存储程序;
处理器,用于执行所述存储器中存储的程序,当所述存储器中存储的程序被执行时,所述处理器用于:
Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知。
进一步地,所述处理器用于:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
进一步地,所述处理器用于:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心。
进一步地,所述处理器用于:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
进一步地,所述处理器用于:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种Linux兼容Android的显示消息通知方法,其特征在于,所述方法包括如下步骤:
步骤S1:Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
步骤S2:Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
步骤S3:Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
步骤S4:消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;
若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知;其中,
将消息通知通过浮窗通知,包括:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心;
将消息通知在系统通知托盘中闪烁通知,包括:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
2.如权利要求1所述的Linux兼容Android的显示消息通知方法,其特征在于,所述方法在步骤S1之前,还包括:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
3.如权利要求1所述的Linux兼容Android的显示消息通知方法,其特征在于,所述方法还包括:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
4.一种Linux兼容Android的显示消息通知装置,其特征在于,所述装置包括:
存储器,用于存储程序;
处理器,用于执行所述存储器中存储的程序,当所述存储器中存储的程序被执行时,所述处理器用于:
Android系统框架服务层监听消息通知,获取消息所属的应用包名、应用名称;
Android服务进程根据应用的包名查询应用名称,将应用包名、应用名称、消息内容、Linux系统上应用的窗口ID封装成一个数据结构体,再将数据结构体转换成数据流通过socket发送给Linux;
Linux接收到数据流后,将数据流反序列化转换成数据结构体,将数据结构体发送给消息处理中心;
消息处理中心根据应用窗口数据字典的应用包名与应用窗口的映射关系,判断应用窗口是否为活跃窗口,若应用窗口为活跃窗口,则将消息通知丢弃不予处理;
若应用窗口为非活跃窗口,则将消息通知在消息通知中心显示或在系统通知托盘中闪烁通知或通过浮窗通知;其中:
所述处理器用于将消息通知通过浮窗通知,包括:
根据应用包名获取通知需要显示的应用图标;
将应用名称、图标路径、消息内容、消息超时时间打包成一个参数列表;
获取新消息ID值;将所述新消息ID值存在一个数据字典中,键为应用包名,值为消息ID,以使应用包名与消息ID对应;
在Linux系统界面顶部显示一个浮窗消息,消息显示应用名称、图标及消息内容;待超过超时时间后自动关闭浮窗,将消息显示到消息通知中心;
所述处理器用于将消息通知在系统通知托盘中闪烁通知,包括:
根据数据结构体中的应用包名在数据字典中查找,如果查找到应用的托盘通知对象的图标,则调用显示函数将应用图标显示出来,并开启定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁;如果没有查找到应用的托盘通知对象的图标,则创建一个托盘图标对象,将该对象的图标设置为Android应用图标,并将此对象加入到数据字典,同时开启一个定时器,定时器每间隔一定时间超时一次,每次超时的时候交替显示托盘通知的图标,使图标闪烁。
5.如权利要求4所述的Linux兼容Android的显示消息通知装置,其特征在于,所述处理器用于:
在Linux系统上启动一个后台服务进程,所述后台服务进程启动一个本地套接字服务端,所述套接字服务端启动以后等待Android侧的进程连接,如果没有连接,套接字服务端一直阻塞等待连接;当Android侧的进程连接上套接字服务端,并向套接字服务端发送数据包时,阻塞就被解除,执行相应的数据处理逻辑。
6.如权利要求4所述的Linux兼容Android的显示消息通知装置,其特征在于,所述处理器用于:
当关闭Android应用窗口或将应用窗口由非活跃窗口切换为活跃窗口时,移除消息通知中心的应用通知,隐藏系统托盘的闪烁通知。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111068376.2A CN113778280B (zh) | 2021-09-13 | 2021-09-13 | 一种Linux兼容Android的显示消息通知方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111068376.2A CN113778280B (zh) | 2021-09-13 | 2021-09-13 | 一种Linux兼容Android的显示消息通知方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113778280A CN113778280A (zh) | 2021-12-10 |
CN113778280B true CN113778280B (zh) | 2023-11-14 |
Family
ID=78843019
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111068376.2A Active CN113778280B (zh) | 2021-09-13 | 2021-09-13 | 一种Linux兼容Android的显示消息通知方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778280B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114416239B (zh) * | 2021-12-30 | 2023-08-22 | 麒麟软件有限公司 | 一种将Android应用消息通知快速显示在Linux系统上的方法 |
CN114201134B (zh) * | 2022-02-17 | 2022-04-29 | 北京麟卓信息科技有限公司 | 安卓兼容环境中多窗口模式下Toast的优化显示方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011120288A1 (zh) * | 2010-03-31 | 2011-10-06 | 北京播思软件技术有限公司 | 一种在android系统中运行linux应用的方法及装置 |
CN104092815A (zh) * | 2014-05-22 | 2014-10-08 | 中兴通讯股份有限公司 | 一种基于安卓系统的应用间信息交互方法及装置 |
CN104317661A (zh) * | 2014-11-04 | 2015-01-28 | 上海斐讯数据通信技术有限公司 | 嵌入式双系统的系统间通信方法及装置 |
CN112269604A (zh) * | 2020-11-11 | 2021-01-26 | 北京技德系统技术有限公司 | 在Linux上兼容运行Android应用的窗口交互方法及装置 |
CN113204307A (zh) * | 2021-05-06 | 2021-08-03 | 技德技术研究所(武汉)有限公司 | 一种在Linux上兼容运行Android系统的文件发送方法及装置 |
CN113254154A (zh) * | 2021-05-21 | 2021-08-13 | 技德技术研究所(武汉)有限公司 | 一种在Linux上兼容运行Android系统的应用启动方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120317498A1 (en) * | 2011-06-07 | 2012-12-13 | Research In Motion Limited | Electronic communication device and method for displaying icons |
-
2021
- 2021-09-13 CN CN202111068376.2A patent/CN113778280B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011120288A1 (zh) * | 2010-03-31 | 2011-10-06 | 北京播思软件技术有限公司 | 一种在android系统中运行linux应用的方法及装置 |
CN104092815A (zh) * | 2014-05-22 | 2014-10-08 | 中兴通讯股份有限公司 | 一种基于安卓系统的应用间信息交互方法及装置 |
CN104317661A (zh) * | 2014-11-04 | 2015-01-28 | 上海斐讯数据通信技术有限公司 | 嵌入式双系统的系统间通信方法及装置 |
CN112269604A (zh) * | 2020-11-11 | 2021-01-26 | 北京技德系统技术有限公司 | 在Linux上兼容运行Android应用的窗口交互方法及装置 |
CN113204307A (zh) * | 2021-05-06 | 2021-08-03 | 技德技术研究所(武汉)有限公司 | 一种在Linux上兼容运行Android系统的文件发送方法及装置 |
CN113254154A (zh) * | 2021-05-21 | 2021-08-13 | 技德技术研究所(武汉)有限公司 | 一种在Linux上兼容运行Android系统的应用启动方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113778280A (zh) | 2021-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240095043A1 (en) | Execution of sub-application processes within application program | |
CN113778280B (zh) | 一种Linux兼容Android的显示消息通知方法及装置 | |
EP3893118A1 (en) | Recovery from application anomaly | |
CN105183551B (zh) | 基于Linux容器技术的多Android系统之间切换方法 | |
US9071625B2 (en) | Cross-environment event notification | |
KR101702729B1 (ko) | 다중 환경 운영 시스템에서 환경을 전환하는 시스템 및 방법 | |
WO2013060245A1 (zh) | 用于移动终端的应用屏幕截图方法和装置 | |
WO2018161813A1 (zh) | 一种资源加载方法及装置 | |
US10298469B2 (en) | Automatic asynchronous handoff identification | |
WO2023109138A1 (zh) | Linux系统中启动安卓应用的方法、装置和电子设备 | |
CN109308241B (zh) | 监听应用程序启动流程方法、装置、终端设备和存储介质 | |
US9170842B2 (en) | Information processing terminal and resource release method | |
CN113900754B (zh) | 共享桌面方法、装置、计算机设备和存储介质 | |
TW201601059A (zh) | 螢幕分享方法以及使用該方法的裝置 | |
US11314391B2 (en) | Navigation bar controlling method and terminal | |
CN107818023B (zh) | 基于线程的消息处理方法、智能设备及存储介质 | |
US20130204924A1 (en) | Methods and apparatuses for providing application level device transparency via device devirtualization | |
CN109361948B (zh) | 界面管理方法、智能终端及可读存储介质 | |
CN113032080A (zh) | 页面实现方法、应用程序、电子设备及存储介质 | |
TW201826102A (zh) | 應用運行方法及裝置 | |
US11249771B2 (en) | Terminal input invocation | |
CN107015866B (zh) | 一种数据处理方法及装置 | |
CN114035865A (zh) | 启动小程序的方法、装置、设备以及存储介质 | |
CN114281555A (zh) | 应用状态同步方法、装置、电子设备和存储介质 | |
WO2019000820A1 (zh) | 锁屏界面消息的处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |