Application层的 PackageManager

Application层的 PackageManager,第1张

获取 PackageManager

像 Activity 这种的的context的实现类的 ContextImpl

ActivityThreadjava

综上可以得知,PackageManager也是采用的 IBinder 进行通信,客户端保存了一个远程 BinderProxy,并且利用 ApplicationPackageManager(extends PackageManager )进行了封装,提供给用户使用,Application 层底层的通信还是通过其ApplicationPackageManager 保存的 BinderProxy 进行通信的。所有的逻辑都会转给 系统进程的PackageManagerService 处理。

这个很简单,你需要使用PackageManager,你查看这个类,就知道怎么获取Android手机里所有的应用程序的应用名称了,我的程序在linux里,若你查找了 还没搞定我可以给你一段代码

// 获取packageManager对象

PackageManager packageManager = thisgetPackageManager();

/getInstalledApplications 返回当前设备上安装的应用包集合

ApplicationInfo对应着androidManifestxml中的application标签。通过它可以获取该application对应的信息

/

List<ApplicationInfo> applicationInfos = packageManagergetInstalledApplications(0);

以上是主要代码

applicationInfos里的是ApplicationInfo类,ApplicationInfo applicationInfo = applicationInfosget(i);

String packageName = applicationInfopackageName;// 包名

String packageLabel = packageManagergetApplicationLabel(applicationInfo)toString();

packageLabel 这个就是应用程序名称

哥们给你解答,加分加威望哈String path = contextgetPackageManager()getApplicationInfo( contextgetPackageName(), 0)sourceDir; DexFile dexfile = new DexFile(path); Enumeration entries = dexfileentries(); while (entrieshasMoreElements()) { String name = (String) entriesnextElement(); } 查看原帖>>

应用的名称不是文件名得来的。是通过packagemanager接口获取。

final PackageManager pm = contextgetPackageManager();

ApplicationInfo ai;

try {

ai = pmgetApplicationInfo(packageName, 0);

} catch (final NameNotFoundException e) {

ai = null;

}

final String applicationName = (String) (ai != null pmgetApplicationLabel(ai) : "(unknown)");

在用户安装完之后,可以通过监听广播,获取安装的应用名称信息。

Android检测手机是否有微信,可以通过微信的SDK提供的方法进行判断,步骤如下:

1在项目中导入微信的SDK,也就是他们提供的开发包。在工程中新建一个libs目录,将开发工具包中libs目录下的libammsdkjar复制到该目录中(如下图所示,建立了一个名为SDK_Sample 的工程,并把jar包复制到libs目录下)。

2第二步就可以在工程任意地方使用微信提供的WXAPIFactory的方法进行判断,代码如下:

private boolean isWXAppInstalledAndSupported() {

       IWXAPI msgApi = WXAPIFactorycreateWXAPI(this, null);

       msgApiregisterApp(ConstantsAPP_ID);

       boolean sIsWXAppInstalledAndSupported = msgApiisWXAppInstalled()

               && msgApiisWXAppSupportAPI();

       return sIsWXAppInstalledAndSupported;

   }

判断手机已安装某程序的方法:

private boolean isAvilible(Context context, String packageName){

final PackageManager packageManager = contextgetPackageManager();//获取packagemanager

List< packageInfo> pinfo = packageManagergetInstalledPackages(0);//获取所有已安装程序的包信息

List<String> pName = new ArrayList<String>();//用于存储所有已安装程序的包名

//从pinfo中将包名字逐一取出,压入pName list中

if(pinfo != null){

for(int i = 0; i < pinfosize(); i++){

String pn = pinfoget(i)packageName;

pNameadd(pn);

}

}

return pNamecontains(packageName);//判断pName中是否有目标程序的包名,有TRUE,没有FALSE

}

判断后的逻辑:

//已安装,打开程序,需传入参数包名:"comskypeandroidverizon"

if(isAvilible(this, "comskypeandroidverizon")){

Intent i = new Intent();

ComponentName cn = new ComponentName("comskypeandroidverizon",

"comskypeandroidverizonSkypeActivity");

isetComponent(cn);

startActivityForResult(i, RESULT_OK);

}

//未安装,跳转至market下载该程序

else {

Uri uri = Uriparse("market://detailsid=comskypeandroidverizon");//id为包名

Intent it = new Intent(IntentACTION_VIEW, uri);

startActivity(it);

}

以上就是关于Application层的 PackageManager全部的内容,包括:Application层的 PackageManager、需要在java环境下取得apk应用程序名、怎么获取一个包下的全部类名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9275414.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存