Cordova - 修改或删除 MainActivity

11

我正在开发一个 Cordova 应用程序,应该以“Kiosk”模式运行 - 设备将被锁定在该应用上,不应能够退出。

为了实现这一点,我正在使用一个稍微修改过的 cordova-plugin-kiosk 版本,它提供了一个额外的活动(KioskActivity),该活动被定义为启动器(具有 android.intent.category.HOME)。

这个方案还算可以。但是,应用程序仍然拥有原始的 cordova MainActivity,这会导致一些困惑,尤其是这是通过原始启动器中的图标以及 cordova run android 命令启动的东西。它还会导致 Chrome 远程检查器中出现两个条目。

AndroidManifest.xml 目前看起来像这样:

    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
        <intent-filter android:label="@string/launcher_name">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|uiMode" android:label="@string/activity_name" android:launchMode="singleInstance" android:name="jk.cordova.plugin.kiosk.KioskActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </activity>

我希望将它们合并成一个单一的活动并消除混乱。

我可以想到两种可能的方法:

  1. 找到一种方法从AndroidManifest.xml中删除MainActivity部分,并有望使cordova run android运行KioskActivity
  2. 找到一种方法修改MainActivity并将KioskActivity中的代码移入其中。

然而,我无法找到任何明智的方法来实现这两个目标,而不会通过破坏所有 cordova 工具来引起更多混乱。

2个回答

10

这有两种可能的解决方案:

1. 使用钩子修改 MainActivity

使用钩子将自定义的 MainActivity.java 复制到 platforms/android/src/[packageName]/ 并覆盖默认的 Cordova MainActivity

例如,可以将一个 before_build 钩子添加到 config.xml<platform name="android"> 部分中,像这样:

<hook type="before_build" src="scripts/updateMainActivity.sh" />

脚本 scripts/updateMainActivity.sh 的位置:

#!/bin/bash
cp MainActivity.java platforms/android/src/[packageName]/

你也可以使用nodeJS编写钩子,这对于跨平台兼容性很有好处。

2. 使用cordova-custom-config删除MainActivity

使用cordova-custom-config,你只需要在config.xml的<platform name="android">部分添加以下内容:

<preference name="android-manifest/application/activity[@android:name='MainActivity']" delete="true" />
注意:您需要使用cordova-custom-config> = 3.0.0。 这是我采用的解决方案,因为我已经在使用cordova-custom-config。

你好,我有一个需求,如http://stackoverflow.com/questions/42408235/is-it-possible-to-hide-the-app-icon-on-home-screen-cordova-angularapp/42408335#42408335所述。我尝试了第二步,但我仍然在APP主页上看到应用程序图标。请问能否在这里提供帮助。 - user1455310
MainActivity去哪里了?我把它放在before_build文件夹里,但是第一个选项出现错误“cp:无法统计'MainActivity.java':没有那个文件或目录”。 - sioesi
你不需要一个名为 before_build 的文件夹。将 updateMainActivity.sh 放在 scripts 中,将 MainActivity.javaconfig.xml 一起放在项目根目录中。 - SystemParadox

6

如果您想修改Manifest.xml中活动的条目,可以从插件的plugin.xml文件中进行。

<edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='MainActivity']" mode="overwrite">
<activity android:name="MainActivity" android:label="NewLabel" android:configChanges="orientation|keyboardHidden" />
</edit-config>

通过这个方式,你可以删除 MainActivity 的入口或者更改它,使其不再是应用的启动器活动。
来源: 链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接