我知道有很多类似的帖子,比如
这:Launch an application from another application on Android
并且:Launch Activity from another Application Android
但他们不满足我的问题。
背景
我正在开发一个应用程序,我需要调用已安装在手机中的应用程序。例如Astro Filemanager
我的问题是:
如何从我的Activity中调用手机中安装的应用程序,请记住我没有包名,我只有应用程序名称。
我可以实现吗?
If yes then how?
if not then why?
我知道我可以使用软件包名称调用另一个应用程序,但在我的情况下,我没有软件包名称,我只有应用程序名称可用
另一种情景
我可以在项目文件夹中保存应用程序的.apk文件,然后从那里调用apk吗?
答案 0 :(得分:2)
我写了一个方法,它返回所有已安装的应用程序及其包和显示名称。
public static List<PInfo> getInstalledApps(Context context) {
List<PInfo> result = new ArrayList<PInfo>();
List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(0);
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
PInfo fileInfo = new PInfo();
fileInfo.appname = p.applicationInfo.loadLabel(context.getPackageManager()).toString();
fileInfo.pname = p.packageName;
fileInfo.versionName = p.versionName;
fileInfo.versionCode = p.versionCode;
fileInfo.icon = p.applicationInfo.loadIcon(context.getPackageManager());
result.add(fileInfo);
}
return result;
}
也许您可以通过显示名称搜索包名称,并使用该包名创建一个意图。
答案 1 :(得分:0)
如果您需要启动Astro文件管理器来选择文件,那么您可以启动
final Intent getContent = new Intent(Intent.ACTION_GET_CONTENT);
//check if there are any app to handle. If not, you must not call startActivity.
if (!getPackageManager.queryIntentActivities(getContent, 0).isEmpty()) {
startActivity(new Intent(Intent.ACTION_GET_CONTENT));
}
请注意,如果有一个具有GET_CONTENt默认值的应用,您将看不到选择器。您可以通过创建选择器意图强制选择器
startActivity(Intent.createChooser(new Intent(Intent.ACTION_GET_CONTENT), "Pick an app"));
不要忘记检查queryIntentActivities是否为空b
如果您只想明确启动Astro,则必须使用它的包名称
startActivity(getPackageManager().getLaunchIntentForPackage(ASTRO_PACKAGE));
可以找到ASTRO_PACKAGE
adb shell pm list packages astro
其中