我有一个自定义启动器,有时想添加一个按钮来启动第三方应用程序。要做到这一点,我需要易于查找的应用程序包名称,还需要应用程序主要或启动活动。我用它来创建我传递给我的应用程序的Intents。
例如,要创建启动Skype的意图,请使用:
`new Intent().setComponent(new ComponentName("com.skype.raider", "com.skype.raider.Main"))
我能够通过Google搜索找到主要活动的名称,因为Skype是最终出现的热门应用程序。
我知道如果我有APK,我可以打开它并查看androidmainifest,但是我不知道如何获得某些应用程序的APK。例如,我想开始this app from Google Play。我可以看到包名com.dbapp.android.mediahouse
,但是我不知道如何获取主要活动的名称(我试过.MAIN)。
我查看了Chrome扩展程序apk downloader,它允许您从Google Play获取APK,但它似乎不再有效。
我知道从自定义启动器启动第三方应用程序是必须相当普遍的,但我在搜索时找不到答案。
人们通常如何处理这个问题?您是否从Google Play商店获得了APK,如果是这样,那么如何做到这一点?同样,我知道我可以通过阅读清单来获取活动,但我不知道如何在许多情况下获得APK本身。非常感谢任何建议,谢谢!
答案 0 :(得分:3)
启动者应该使用MAIN
和LAUNCHER
找到设备上应用宣传的PackageManager
/ queryIntentActivities()
个活动。 Here is a sample app实现了这样一个发射器。
PackageManager pm=getPackageManager();
Intent main=new Intent(Intent.ACTION_MAIN, null);
main.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);
然后,您使用List<ResolveInfo>
来显示ListView
,GridView
等中的可用活动。
答案 1 :(得分:1)
PackageManager
提供了一种方法来准确获取您想要的内容:
PackageManager.getLaunchIntentForPackage(String packageName)
答案 2 :(得分:0)
您可以使用Intent intent = new Intent(android.content.Intent.MAIN);
或者像启动Maps并解析URI背后的示例:
String uri = "http://maps.google.com/maps?saddr=" + Utils.getLatitude(ShowDetails.this)+","+Utils.getLongitude(ShowDetails.this)+"&daddr="+userLatitude+","+userLongitude;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);