获取 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应用程序名、怎么获取一个包下的全部类名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)