Cordova - 修改或删除MainActivity

时间:2016-07-22 15:16:16

标签: android cordova cordova-plugins

我正在开发一个应该在" 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. 找到一种方法从MainActivity中移除AndroidManifest.xml部分,并希望改为cordova run android代替KioskActivity
  2. 找到修改MainActivity并将代码从KioskActivity移入其中的方法。
  3. 但是,我找不到任何合理的方法来实现其中任何一个,而不会因为破坏所有的cordova工具而造成更多混乱。

2 个答案:

答案 0 :(得分:4)

有两种可能的解决方案:

1。使用钩子修改MainActivity

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

例如,before_build一个<platform name="android">段可以添加到config.xml的{​​{1}}部分,如下所示:

<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&gt; = 3.0.0。

这是我使用的解决方案,因为我已经在使用cordova-custom-config。

答案 1 :(得分:4)

如果要在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" />

有了这个,您可以删除MainActivity的条目或更改它,使其不再是应用程序的启动器活动。

Source