我正在开发一个应该在" 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>
我想将这些合并为一个活动,并消除混乱。
我可以看到两种可行的方法:
MainActivity
中移除AndroidManifest.xml
部分,并希望改为cordova run android
代替KioskActivity
。MainActivity
并将代码从KioskActivity
移入其中的方法。但是,我找不到任何合理的方法来实现其中任何一个,而不会因为破坏所有的cordova工具而造成更多混乱。
答案 0 :(得分:4)
有两种可能的解决方案:
使用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编写钩子,这有利于跨平台兼容性)
使用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的条目或更改它,使其不再是应用程序的启动器活动。