18

我实际上正在研究满足以下要求的应用程序的可能性:

  • 主应用程序可能有 5 个停用的功能
  • 如果您尝试使用已停用的功能,该应用程序会邀请您下载可以作为 APK 安装或从市场安装的扩展程序。
  • 一旦安装了该功能,它就会被激活,然后就可以使用了。

所以我们可以有一些免费/非免费的功能。我已经在某些应用程序中看到过这种行为,但我不记得名字了。

Android SDK中有什么东西可以使用吗?如何实施?

谢谢你的帮助。

4

4 回答 4

7

您可以使用 Service 创建 apk 并使用http://developer.android.com/guide/components/aidl.html连接到此服务。而且这项服务可以做你想做的事,所以只有你的想象力才是你的极限;-)

我建议阅读以下内容:http: //developer.android.com/guide/topics/manifest/manifest-element.html#uid可以在 2 个或更多应用程序之间共享更多数据。但是他们应该用相同的键来唱。

于 2012-11-30T11:46:23.870 回答
7

不确定这是否是您要找的东西,但让我建议一些让您入门的东西(可能

举例来说,例如,在您的应用程序中,您有 2 个按钮(而不是 5 个)

按钮 1 和按钮 2。

启动应用程序时,检查是否安装了必要的应用程序(您自己的应用程序的第三方)或未使用PackageManager

这是我在我的应用程序中使用的伪代码,用于检查用户设备上是否安装了 Google 地图:

boolean installedMaps = false;

// CHECK IF AN APPLICATION IS INSTALLED
PackageManager pkManager = getPackageManager();
try {
    PackageInfo pkInfo = pkManager.getPackageInfo("com.google.android.apps.maps", 0); // REPLACE THIS "com.google.android.apps.maps" WITH THE ACTUAL PACAKAGE NAME
    // Log.e("pkInfo", pkInfo.toString());
    installedMaps = true;
} catch (NameNotFoundException e) {
    e.printStackTrace();
    installedMaps = false;
}

如果boolean installedMaps返回true,则启用按钮。否则,使用对话框提示用户从 Google Play 下载应用程序。

并为您需要激活或停用的每个功能执行此操作。

注意:您需要知道其他应用程序的包名称。如果您不知道,可以通过在您的设备上运行应用程序并检查 logcat 来找到它。

如果您还需要在所有相关应用程序之间共享内容,您也可以考虑使用Content Providers

同样,我不完全确定这是否是您正在寻找的。如果我的假设有误,请纠正。

于 2012-11-30T11:56:16.430 回答
3

您必须构建 6 个不同的应用程序/apk 并将它们提交到 Play 商店。至少有 2 个选项可以将应用程序集成在一起:

  1. 如果您的功能采用全屏显示,那么您可以从插件应用程序中启动适当的活动。
  2. 如果主屏幕(来自主应用程序的屏幕)应包含代码(功能)、来自插件应用程序的资源(布局、图像等),请查看http://developer.android.com/guide/topics/manifest/manifest-element .html#uid。使用该配置,您可以通过类名反射从插件应用程序访问代码。

您还可以使用 Resources res = mPackageManager.getResourcesForApplication("org.example.foo"); 从另一个 apk 访问资源 请参阅是否可以在不使用内容提供程序的情况下访问另一个 APK 中的资源?更多细节。

于 2012-11-30T11:52:08.997 回答
1

首先-您所说的“附加功能”到底是什么意思。问题相当复杂。

  1. 检查应用程序是否存在 - 只需使用PackageManager并尝试找到所需的包,如果发现则使用它,如果不要求用户安装。
  2. 资源访问(图像、布局等) - 也包括PackageManager
  3. 使用代码的某些部分 - 许多不同的方式来获得效果。意图 (startActivityForResult()),内容提供者。

引入免费/付费功能的更好方法可能是使用应用内支付。

于 2012-11-30T11:59:56.640 回答