我正在编写Android平台的程序,我想实现已发现应用程序的代码here。在Android上使用应用程序内的应用程序
在我的应用程序菜单中有一个按钮,显示“在地图上显示朋友”,所以我希望此程序从按钮按钮开始。
有关更多详细信息,我将给出一个小图。
用户启动我的应用程序> User Presses "Menu" Key > User Presses "Show Friends on Map" > WAMF.apk
(在上面的链接的应用程序)启动
有没有什么办法可以做到这一点?
我正在编写Android平台的程序,我想实现已发现应用程序的代码here。在Android上使用应用程序内的应用程序
在我的应用程序菜单中有一个按钮,显示“在地图上显示朋友”,所以我希望此程序从按钮按钮开始。
有关更多详细信息,我将给出一个小图。
用户启动我的应用程序> User Presses "Menu" Key > User Presses "Show Friends on Map" > WAMF.apk
(在上面的链接的应用程序)启动
有没有什么办法可以做到这一点?
(我希望雷托•梅耶尔看到你的问题,因为WAMF是他的应用程序)
嗯,在我看来,你有两个主要选择。
选项#1表示WAMF作为单独的应用程序安装。这可能会很棘手,因为目前还不清楚这个应用程序是否可以在任何地方分发(例如,Android电子市场)。但是,假设它是,并且假设用户安装了应用程序,那么当用户调用所需的菜单选项时,您需要使用Intent
调用startActivity()
,这将解析为您希望显示的WAMF中的任何内容。您也可以使用PackageManager
来检测是否安装了WAMF(即查看是否有任何活动与您想要在startActivity()
中使用的Intent
相匹配) - 这样,您可以禁用菜单选项或使其弹出告诉人们安装WAMF的对话框等。
选项#2说,由于WAMF是自由软件,因此您只需将相关代码部分直接集成到您的应用程序中即可。另一方面,代码是否存在也没有问题。不过,如果迈尔先生更新一年前的WAMF,你将不得不重新整合他的改变。此外,他的应用程序在GPLv3下发布,这可能会或可能不适用于您自己的应用程序的授权计划。
如果我理解正确,并且您想要做的是启动WAMF,请参阅this blog post。
在它下面的代码,这将检测是否OpenTable的(或WAMF,在这个问题上)安装,如果是这样调用它,否则将用户带到了Android Market下载OpenTable的:
public void showReserveButton() {
// setup the Intent to call OpenTable
Uri reserveUri = Uri.parse(String.format("reserve://opentable.com/%s?refId=5449",
opentableId));
Intent opentableIntent = new Intent("com.opentable.action.RESERVE", reserveUri);
// setup the Intent to deep link into Android Market
Uri marketUri = Uri.parse("market://search?q=pname:com.opentable");
Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);
opentableButton.setVisibility(opentableId > 0 ? View.VISIBLE : View.GONE);
opentableButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
PackageManager pm = getPackageManager();
startActivity(pm.queryIntentActivities(opentableIntent, 0).size() == 0 ?
opentableIntent : marketIntent);
}
});
}
正如commonsware所说,这是假设WAMF可用于Android市场。如果不是,你运气不好。
我有点困惑上面的代码行:pm.queryIntentActivities(opentableIntent,0).size()== 0? opentableIntent:marketIntent ...不应该让我pm.queryIntentActivities(opentableIntent,0).size()== 0? marketIntent:opentableIntent ???如果软件包管理器将大小返回为零,那么我们希望将用户推向市场。或者我错过了什么?我在developer-android博客上看到了相同的代码(由您链接到上面) – Viren