由packagename得到应用程序信息
有的时候,项目会需要调用别人的应用程序,比如拨号、短信什么的(都是现在rom改的太多了,这些基础应用都一样,碎片化太严重),下面我给出两种方法来实现:
一、通过packmanager的getLaunchIntentForPackage方法
[html] view plain copy
- PackageManager packageManager = MainActivity.this.getPackageManager();
- Intent intent=new Intent();
- try {
- intent =packageManager.getLaunchIntentForPackage("要调用应用的包名");
- } catch (NameNotFoundException e) {
- Log.i(TAG, e.toString());
- }
- startActivity(intent);
这个比较简单,包名的话,可以根据packagemanager获取到packageInfo,最后还可以根据intent获取到componentname。
二、通过intent的resolveActivity方法
[html] view plain copy
- Intent it = new Intent(Intent.ACTION_MAIN);
- it.setPackage(pkg);//pkg为包名
- it.addCategory(Intent.CATEGORY_LAUNCHER);
- ComponentName ac = it.resolveActivity(mPackageManager);//mPackageManager为PackageManager实例
- String classname =ac.getClassName() ;
这种方法是受到了activitymanagerservice源码的启发,创建一个category_lancher类型的intent,然后向PackageManagerService查询Activity。
说明:resolveActivity()方法默认使用MATCH_DEFAULT_ONLY的flag ,是指activity中的catetory必须要包含android.intent.category.DEFAULT类型,否则会返回null。这时可以用 PackageManager 的getLaunchIntentForPackage()方法直接获取intent,再通过intent的getcomonent().getClassName()获取类名,另外getLaunchIntentForPackage() 是PackageManager 的一个抽象方法,其实现是在ApplicationPackageManager包内。
最后补充一点:
过 PackageInfo 获取具体信息方法:
包名获取方法:packageInfo.packageName
icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions
通过 ResolveInfo 获取具体信息方法:
包名获取方法:resolve.activityInfo.packageName
icon获取获取方法:resolve.loadIcon(packageManager)
应用名称获取方法:resolve.loadLabel(packageManager).toString()
更多相关文章
- Android(安卓)Studio基本常用快捷键
- Android学习—Button的四种OnClick响应方法
- android 上傳圖片的幾種方法
- Android使用Broadcast实现无序静态与动态广播功能
- Android(安卓)中添加水平线和垂直线方法总结
- [android] ScrollView 设置滚动条的初始位置
- Android(安卓)ApiDemos示例解析(39):App->Service->Local Service
- Android(安卓)libmp3lame详解
- Android(安卓)Zxing 添加闪光灯功能