CN106708566B - 一种判断应用程序是否被安装的方法及其判断系统 - Google Patents
一种判断应用程序是否被安装的方法及其判断系统 Download PDFInfo
- Publication number
- CN106708566B CN106708566B CN201611092251.2A CN201611092251A CN106708566B CN 106708566 B CN106708566 B CN 106708566B CN 201611092251 A CN201611092251 A CN 201611092251A CN 106708566 B CN106708566 B CN 106708566B
- Authority
- CN
- China
- Prior art keywords
- package
- application program
- information
- application
- name information
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- 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/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种判断应用程序是否被安装的方法及其判断系统,涉及Android系统的开发领域,该方法包括以下步骤:建立安装应用程序列表集合,并将其存储到JAVA的内存区域的静态区中;获取已安装的应用程序的包管理者对象;通过包管理者对象获取当前Android系统的所有已安装的应用程序的包信息,得到包信息集合;通过循环的方式对包信息集合进行遍历,获取所有已安装的应用程序的各自的包信息;从每个包信息中获取对应的已安装的应用程序的包名信息;将所有已安装的应用程序的包名信息存储在安装应用程序列表集合中;以及判断安装应用程序列表集合是否包含所需要判定的应用程序的包名信息。本发明能够提高对应用程序进行多次循环判定的判定速度。
Description
技术领域
本发明涉及Android系统的开发领域,具体涉及一种判断应用程序是否被安装的方法及其判断系统。
背景技术
在Android系统的开发过程中有时候需要判定应用程序是否被安装,如果应用程序安装了,用户就能启动该应用程序,如果应用程序没有被安装,则会提示用户进行应用的下载和安装操作。
传统的判定应用程序是否被安装的方法非常复杂,需要对应用程序进行多次循环判定,效率低下且使用起来非常繁琐。尤其是在多次进行判定应用程序是否安装的时候,由于会多次循环判定导致效率明显低下的问题。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种判断应用程序是否被安装的方法,该方法能提高整个判断过程的速度。
为达到以上目的,本发明采取的技术方案是:
一种判断应用程序是否被安装的方法,该方法包括以下步骤:
建立安装应用程序列表集合,并将其存储到JAVA的内存区域的静态区中;
获取已安装的应用程序的包管理者对象;
通过包管理者对象获取当前Android系统的所有已安装的应用程序的包信息,得到包信息集合;
通过循环的方式对包信息集合进行遍历,获取所有已安装的应用程序的各自的包信息;
从每个包信息中获取对应的已安装的应用程序的包名信息;
将所有已安装的应用程序的包名信息存储在安装应用程序列表集合中;以及
判断安装应用程序列表集合是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序没有安装。
在上述技术方案的基础上,在Android系统启动时通过开启新的线程获取应用程序的包管理者对象、获取当前Android系统的所有已安装的应用程序的包信息、获取所有已安装的应用程序的包信息以及获取对应的已安装的应用程序的包名信息。
在上述技术方案的基础上,采用Thread方式开启所述新的线程。
在上述技术方案的基础上,调用Android系统的getPackageManager接口获取已安装的应用程序的包管理者对象。
在上述技术方案的基础上,调用包管理者对象中的getInstalledPackages函数获取当前Android系统的所有已安装的应用程序的包信息。
在上述技术方案的基础上,通过for循环的方式对包信息集合进行遍历,并调用包信息集合中的get(i)函数获得包信息集合中位置为i的包信息。
在上述技术方案的基础上,调用包信息中的getLaunchIntentForPackage函数来获取对应的应用程序的包名信息。
在上述技术方案的基础上,调用安装应用程序列表集合中的contains方法判断所需要判定的应用程序是否安装,若contains方法 返回true,则安装应用程序列表集合包含所需要判定的应用程序的包名信息,若contains方法返回false,则安装应用程序列表集合未包含所需要判定的应用程序的包名信息。
在上述技术方案的基础上,所述方法还包括将所述contains方法封装成函数isAppInstall的步骤,若所述isAppInstall返回true,则所需要判定的应用程序已经安装,若所述isAppInstall返回false,则所需要判定的应用程序没有安装。
与此同时本发明还提供一种判断应用程序是否被安装的判断系统,该判断系统能提高整个判断过程的速度。
为达到以上目的,本发明采取的技术方案是:
一种判断应用程序是否被安装的判断系统,包括:
包管理者对象模块,其用于管理Android系统中的包信息;
包信息获取模块,其根据所述包管理者对象模块获取Android系统所有已安装的应用程序的包信息,得到包信息集合;
遍历模块,其对包信息集合进行遍历,获得所有已安装的应用程序的单个包信息;
包名信息获取模块,其用于从每个包信息中获取对应的已安装的应用程序的包名信息;
存储模块,其用于存储所有已安装的应用程序的包名信息,所述存储模块设于所述JAVA的内存区域中;以及
判断模块,其用于判断存储模块是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序未安装。
与现有技术相比,本发明的优点在于:
当需要对应用程序进行多次循环判定时,由于本发明的安装应用 程序列表集合listApp缓存在JAVA的内存区域的全局区中,只需要进行一次获取应用程序的包管理者对象PackageManager、获取当前Android系统的所有已安装的应用程序的包信息、获取所有已安装的应用程序的包信息packageInfo以及获取对应的已安装的应用程序的包名信息的过程。多次循环判定只需要进行最后的步骤S7判定过程即可,这样对于整个判断过程的速度有很大程度的提升。此外,还将整个判定过程合理的封装成isAppInstall函数,使得使用起来十分方便。
附图说明
图1为本发明中判断应用程序是否安装的流程图;
图2为本发明中判断系统的结构框图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
参见图1所示,本发明提供一种判断应用程序是否被安装的方法,该方法包括以下步骤:
S1.建立安装应用程序列表集合,并将其存储到JAVA的内存区域的静态区中;
在Java中内存区域被划分为5大块,分为栈区,堆区,静态区,文字常亮区,程序代码区。各个区的功能和特性描述如下所示:
栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。它与数据结构中的堆是两种不同概念,分配方式类似于链表。
全局区(静态区)(static):全局变量和静态变量的存储放在一起,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。静态区的数据由于存储在单独的一块区域,所以全局可以访问。
文字常量区:其用于存放常量字符串,程序结束后由系统释放。
程序代码区:用于存放函数体的二进制代码。
本发明由于需要存储已经安装应用程序的列表信息,并且希望能够在程序中的全局进行访问,所以综合对比选择将安装应用程序列表集合listApp存放在内存的静态区中。
S2.获取已安装的应用程序的包管理者对象;
在Android系统中,系统提供给开发者一个专门用于包管理的包管理者对象PackageManager,这个包管理者对象PackageManager专门用于管理Android系统中所有安装包的信息。包管理者对象PackageManager中的包指的是安装包,在Android系统中一个包和一个应用程序是一一对应关系。
具体的,通过调用Android系统提供的接口getPackageManager来获取已安装的应用程序的包管理者对象PackageManager。
S3.通过包管理者对象获取当前Android系统的所有已安装的应用程序的包信息,得到包信息集合;
通过包管理者对象PackageManager可以获取到当前Android系统的所有已安装的应用程序的包信息。具体的,可以通过调用包管理者对象PackageManager中的getInstalledPackages函数,来返回当前Android系统所有的包信息集合,这里将包信息集合标记为listPackage。
S4.通过循环的方式对包信息集合进行遍历,获取所有已安装的 应用程序的各自的包信息;
本发明中通过for循环的方式对包集合listPackage进行遍历,每次循环从listPackage中取出一个包信息。
具体的,可以调用包集合listPackage中的get(i)函数来获得包集合listPackage中位置为i的元素。
获取到的每一个元素就是一个应用程序的包信息packageInfo。
S5.从每个包信息中获取对应的已安装的应用程序的包名信息;
通过调用包信息packageInfo中的getLaunchIntentForPackage函数来获取对应的已安装的应用程序的包名信息。应用程序的包名主要用来唯一标记某一个应用程序。
S6.将所有已安装的应用程序的包名信息存储在安装应用程序列表集合中;
获取到已安装的应用程序的包名信息后,将这些包名信息存储在安装应用程序列表集合listApp中。具体的,通过调用安装应用程序列表集合listApp集合中的add方法将包名信息存储到其中。上述方法进行全局遍历以后,即可将所有安装程序的包名信息全部存储在安装应用程序列表集合listApp中。
此外,为了不影响Android系统的启动速度,上述获取应用程序的包管理者对象PackageManager、获取当前Android系统的所有已安装的应用程序的包信息、获取所有已安装的应用程序的包信息packageInfo以及获取对应的已安装的应用程序的包名信息的过程均是在Android系统启动时通过开启新的线程进行的。
开启线程在JAVA中常见的有下述方法:
1.线程池
线程池对线程有一定的缓存作用,通常使用情况是使用在多个线 程的时候,因为线程池会对多个线程有一定的缓存和管理功能。
2.通过Thread方式进行线程开启
普通Thread方式开启线程通常应用场景时单一一个线程的场景,因为Thread开启多线程的方式不能够对多个线程进行管理操作,仅仅能够开启一个线程。
Thread方式开启子线程具体方式是调动其中的start方法,通过start方法就能够启动一个新的线程。
通过上面两种方式的比较,由于本发明中仅仅开启一个线程去执行获取已经安装应用程序的操作,所以本发明选择Thread方式去开启子线程。
S7.判断安装应用程序列表集合是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序没有安装。
通常一个应用程序的包名信息是不会变化的,比如微信的包名信息一旦确定后,微信的包名信息在后续所有版本的迭代中是不会进行包名变更的。所以可以根据应用程序的包名信息来判定应用程序是否已经安装。
如果安装应用程序列表集合listApp中已经包含了所需要判定的应用的包名信息,那么说明这个程序已经被安装了。
如果安装应用程序列表集合listApp中没有包含所需要判定的应用的包名信息,那么说明这个程序没有被安装。
安装应用程序列表集合listApp中有一个contains方法,contains方法是描述得到的字符串是否包含某个字符串。contains方法可以用于判定包名信息是否存在,如果包名信息在安装应用程序列表集合listApp中存在,那么contains方法会返回true,如果包名信息在安装 应用程序列表集合listApp中不存在,那么contains方法会返回false。
为了使用起来方便,还可以上述contains方法进行封装,将上述判定过程封装成一个isAppInstall函数,当需要判定应用程序是否安装的时候可以直接调用封装好的isAppInstall函数就能够判定应用程序是否安装了。
如果isAppInstall方法返回true,表明应用程序已经安装过了,如果isAppInstall返回的是false,表明应用程序是没有安装过的。
通过本发明中的上述方法就能够实现快速高效的判定应用是否安装的逻辑了,当需要对应用程序进行多次循环判定时,由于安装应用程序列表集合listApp缓存在JAVA的内存区域的全局区中,只需要进行一次获取应用程序的包管理者对象PackageManager、获取当前Android系统的所有已安装的应用程序的包信息、获取所有已安装的应用程序的包信息packageInfo以及获取对应的已安装的应用程序的包名信息的过程。多次循环判定只需要进行最后的步骤S7判定过程即可,这样对于整个判断过程的速度有很大程度的提升。此外,还将整个判定过程合理的封装成isAppInstall函数,使得使用起来十分方便。
参见图2所示,本发明还提供一种判断应用程序是否被安装的判断系统,其包括:
包管理者对象模块,其用于管理Android系统中的包信息;
包信息获取模块,其根据包管理者对象模块获取Android系统所有已安装的应用程序的包信息,得到包信息集合;
遍历模块,其对包信息集合进行遍历,获得所有已安装的应用程序的单个包信息;
包名信息获取模块,其用于从每个包信息中获取对应的已安装的 应用程序的包名信息;
存储模块,其用于存储所有已安装的应用程序的包名信息,所述存储模块设于所述JAVA的内存区域中;以及
判断模块,其用于判断存储模块是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序未安装。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (9)
1.一种判断应用程序是否被安装的方法,其特征在于,该方法包括以下步骤:
建立安装应用程序列表集合,并将其存储到JAVA的内存区域的静态区中;
获取已安装的应用程序的包管理者对象;
通过包管理者对象获取当前Android系统的所有已安装的应用程序的包信息,得到包信息集合;
通过循环的方式对包信息集合进行遍历,获取所有已安装的应用程序的各自的包信息;
从每个包信息中获取对应的已安装的应用程序的包名信息,其中,获取应用程序的包管理者对象、获取当前Android系统的所有已安装的应用程序的包信息、获取所有已安装的应用程序的包信息以及获取对应的已安装的应用程序的包名信息,均是在Android系统启动时通过开启新的线程执行;
将所有已安装的应用程序的包名信息存储在安装应用程序列表集合中;以及
判断安装应用程序列表集合是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序没有安装。
2.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:采用Thread方式开启所述新的线程。
3.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:调用Android系统的getPackageManager接口获取已安装的应用程序的包管理者对象。
4.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:调用包管理者对象中的getInstalledPackages函数获取当前Android系统的所有已安装的应用程序的包信息。
5.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:通过for循环的方式对包信息集合进行遍历,并调用包信息集合中的get(i)函数获得包信息集合中位置为i的包信息。
6.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:调用包信息中的getLaunchIntentForPackage函数来获取对应的应用程序的包名信息。
7.如权利要求1所述的判断应用程序是否被安装的方法,其特征在于:调用安装应用程序列表集合中的contains方法判断所需要判定的应用程序是否安装,若contains方法返回true,则安装应用程序列表集合包含所需要判定的应用程序的包名信息,若contains方法返回false,则安装应用程序列表集合未包含所需要判定的应用程序的包名信息。
8.如权利要求7所述的判断应用程序是否被安装的方法,其特征在于:所述方法还包括将所述contains方法封装成函数isAppInstall的步骤,若所述isAppInstall返回true,则所需要判定的应用程序已经安装,若所述isAppInstall返回false,则所需要判定的应用程序没有安装。
9.一种判断应用程序是否被安装的判断系统,其特征在于,包括:
包管理者对象模块,其用于管理Android系统中的包信息;
包信息获取模块,其根据所述包管理者对象模块获取Android系统所有已安装的应用程序的包信息,得到包信息集合;
遍历模块,其对包信息集合进行遍历,获得所有已安装的应用程序的单个包信息;
包名信息获取模块,其用于从每个包信息中获取对应的已安装的应用程序的包名信息;
所述包信息获取模块获取Android系统的所有已安装的应用程序的包信息、所述遍历模块获得所有已安装的应用程序的包信息以及所述包名信息获取模块获取对应的已安装的应用程序的包名信息,均是在Android系统启动时通过开启新的线程执行;
存储模块,其用于存储所有已安装的应用程序的包名信息,所述存储模块设于JAVA的内存区域中;以及
判断模块,其用于判断存储模块是否包含所需要判定的应用程序的包名信息,若是,则所需要判定的应用程序已经安装,若否,则所需要判定的应用程序未安装。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611092251.2A CN106708566B (zh) | 2016-11-30 | 2016-11-30 | 一种判断应用程序是否被安装的方法及其判断系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611092251.2A CN106708566B (zh) | 2016-11-30 | 2016-11-30 | 一种判断应用程序是否被安装的方法及其判断系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106708566A CN106708566A (zh) | 2017-05-24 |
CN106708566B true CN106708566B (zh) | 2020-08-04 |
Family
ID=58935423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611092251.2A Active CN106708566B (zh) | 2016-11-30 | 2016-11-30 | 一种判断应用程序是否被安装的方法及其判断系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106708566B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107977566B (zh) * | 2017-11-27 | 2021-03-19 | 珠海市君天电子科技有限公司 | 一种功能触发方法、装置及电子设备 |
CN110795133B (zh) * | 2019-10-14 | 2024-03-15 | 广州微算互联信息技术有限公司 | 一种辅助应用自动保护方法及装置 |
CN113312097A (zh) * | 2021-05-28 | 2021-08-27 | 杭州迈冲科技有限公司 | 基于Android系统修改开机启动程序的方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005092649A (ja) * | 2003-09-18 | 2005-04-07 | Ricoh Co Ltd | デジタルデータインストールシステム、デジタルデータインストール方法、プログラム、及びプログラムを記録した記録媒体 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980503B (zh) * | 2010-10-18 | 2015-04-01 | 中兴通讯股份有限公司 | 一种widget应用管理方法、装置和系统 |
CN105227764B (zh) * | 2015-09-02 | 2019-02-12 | 珠海豹趣科技有限公司 | 移动终端上的游戏应用程序的传送方法和装置 |
CN106055357A (zh) * | 2016-05-26 | 2016-10-26 | 北京小米移动软件有限公司 | 应用安装方法及装置 |
-
2016
- 2016-11-30 CN CN201611092251.2A patent/CN106708566B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005092649A (ja) * | 2003-09-18 | 2005-04-07 | Ricoh Co Ltd | デジタルデータインストールシステム、デジタルデータインストール方法、プログラム、及びプログラムを記録した記録媒体 |
Also Published As
Publication number | Publication date |
---|---|
CN106708566A (zh) | 2017-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8145817B2 (en) | Reader/writer lock with reduced cache contention | |
KR101971389B1 (ko) | 연합 기반 메모리 관리 | |
CN106708566B (zh) | 一种判断应用程序是否被安装的方法及其判断系统 | |
US8504987B2 (en) | System and method for supporting an object oriented scripting tool | |
US7779043B2 (en) | Extensible mechanism for object composition | |
US11074179B2 (en) | Managing objects stored in memory | |
EP2834744B1 (en) | System and method for memory management | |
CA2722864C (en) | Configurable partitioning for parallel data | |
CN102073525A (zh) | 基于Java平台的Web业务系统的动态升级方法及装置 | |
CN110597606A (zh) | 一种高速缓存友好的用户级线程调度方法 | |
CN111666210A (zh) | 一种芯片验证方法及装置 | |
CN115632944B (zh) | 一种节点配置方法、装置、设备、可读存储介质及服务器 | |
CN111953503B (zh) | Nfv资源部署编排方法和网络功能虚拟化编排器 | |
CN114588638A (zh) | 基于Lua语言进行游戏开发的方法及程序开发装置 | |
CN111459464B (zh) | 节点融合方法、代码生成方法、装置 | |
CN111562952A (zh) | 双芯智能电表管理单元的动态装载方法、动态装载装置 | |
US8904406B2 (en) | Coordination of tasks executed by a plurality of threads using two synchronization primitive calls | |
CN111767155A (zh) | 死锁检测方法、装置、设备及计算机可读存储介质 | |
CN105843735A (zh) | 一种终端内存的消耗方法及装置 | |
CN104267929A (zh) | 计算系统以及在该计算系统中操作锁的方法 | |
US10521155B2 (en) | Application management data | |
CN112596741B (zh) | 一种视频监控服务部署方法及装置 | |
KR20060096569A (ko) | 다단계 할당 방식을 이용한 풀 자원 관리 방법 | |
CN114428653B (zh) | 使用不同编译设置的代码的即时jit编译实例 | |
CN110083539B (zh) | 一种数据竞争检测方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |