当前位置:   article > 正文

Android 根据包名获得主activity_getapplicationinfo 获得主activity名称

getapplicationinfo 获得主activity名称

有的时候,项目会需要调用别人的应用程序,比如拨号、短信什么的(都是现在rom改的太多了,这些基础应用都一样,碎片化太严重),下面我给出两种方法来实现:

一、通过packmanager的getLaunchIntentForPackage方法

  1. PackageManager packageManager = MainActivity.this.getPackageManager();
  2. Intent intent=new Intent();
  3. try {
  4. intent =packageManager.getLaunchIntentForPackage("要调用应用的包名");
  5. } catch (NameNotFoundException e) {
  6. Log.i(TAG, e.toString());
  7. }
  8. startActivity(intent);

这个比较简单,包名的话,可以根据packagemanager获取到packageInfo,最后还可以根据intent获取到componentname。

二、通过intent的resolveActivity方法

  1. Intent it = new Intent(Intent.ACTION_MAIN);
  2. it.setPackage(pkg);//pkg为包名
  3. it.addCategory(Intent.CATEGORY_LAUNCHER);
  4. ComponentName ac = it.resolveActivity(mPackageManager);//mPackageManager为PackageManager实例
  5. 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()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/288794
推荐阅读
相关标签
  

闽ICP备14008679号