【问题标题】:Installing application without icon or activity安装没有图标或活动的应用程序
【发布时间】:2013-03-28 11:04:10
【问题描述】:

我和一位朋友讨论过,他告诉我,有些应用程序可以安装在 android 上,而无需在菜单中显示任何活动或图标。因为我也在学习android,所以我很惊讶,因为我从来没有听说过。

应用程序的名称显示在“管理应用程序”部分,并且很容易卸载。

所以现在我作为程序员问。 (如果是的话)如何安装这种应用程序? (没有活动或启动器)。

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

    只需从清单中删除以下所有意图过滤器:

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    

    请记住,尽管从 Android 3.1 开始,如果用户没有手动操作,您的应用将不会接收任何广播,也不会列在意图过滤器使其可用的任何其他位置(例如在共享菜单中)从启动器中打开您的应用 UI(主 Activity)至少一次。

    【讨论】:

    • 它不允许我这样做。当我这样做时,我得到一个“未找到默认活动”
    【解决方案2】:

    还有另一种方法,即使在 Android3.1+ 上也可以使用。您不能禁用图标本身,但可以禁用应用程序的一个组件。因此禁用应用程序启动器活动将导致其图标从启动器中删除。

    执行此操作的代码很简单:

    ComponentName componentToDisable =
      new ComponentName("com.helloandroid.apptodisable",
      "com.helloandroid.apptodisable.LauncherActivity");
    
    getPackageManager().setComponentEnabledSetting(
      componentToDisable,
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
      PackageManager.DONT_KILL_APP);
    

    关于这个解决方案有几点需要了解:

    1-禁用的组件将无法以任何方式启动

    2-其他非禁用活动将可以从其他应用程序启动

    3-一个应用程序只能禁用它自己的组件。有一个权限“android.permission.CHANGE_COMPONENT_ENABLED_STATE”,但是它不起作用,3rd 方复制不能有这个权限

    4-图标只会在启动器重新启动时消失,因此很可能在下次手机重新启动时,不建议强制启动器重新启动

    这样,应用程序必须至少按时运行。

    参考:

    Removing an app icon from launcher

    【讨论】:

    • 我不同意第 1 点和第 4 点。您可以创建一个可用作“代理”的接收器(从拨号器前启动:*#777#)。它的功能是启用和打开MainActivity。我已经在 4.2 上对此进行了测试。
    • @Tuga 感谢您的回复。请问您能解释更多细节吗?
    【解决方案3】:

    是的,这种应用是可能的。您必须在 Manifest 文件中创建一个没有 Launcher Activity 的应用程序。

    例如:- 您可以在收到的启动时注册广播。因此,当设备启动时,您的应用程序将被调用,尽管它没有任何 UI。你可以结账this一个。

    NOTE - 这种类型的应用程序只能在 3.1 以下运行。

    【讨论】:

    • 如果应用程序图标没有显示,用户如何打开应用程序?还有什么打开方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多