我正在开发一个移动的应用程序使用离子框架(基于 cordova )。
在Android中,我注册了我的应用程序来打开 *.txt文件。我在platforms/android/AndroidManifest.xml中添加了意图过滤器,它工作正常。但平台文件夹在.gitignore中:我想使用config.xml来执行此操作。
我尝试在config.xml中添加:
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/*/application/activity">
<intent-filter><!-- ... --></intent-filter>
</config-file>
<!-- ... -->
</platform>
而我也试探着补充道:
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/manifest/application">
<activity android:name="CordovaApp">
<intent-filter><!-- ... --></intent-filter>
</activity>
</config-file>
<!-- ... -->
</platform>
然后我尝试更新AndroidManifest启动
ionic prepare
或者也可以:
ionic remove platform android && ionic add platform android
但是AndroidManifest.xml总是不变的,我做错了什么?
我用的是离子1.3.2和 cordova 4.2.0。
编辑此处为整个config.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<widget id="com.ionicframework.myapp551932" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<name>MyApp</name>
<description>
myApp
</description>
<author email="xxx@yyy.it" href="http://www.example.com/">
A Team
</author>
<content src="index.html"/>
<access origin="*"/>
<preference name="webviewbounce" value="false"/>
<preference name="UIWebViewBounce" value="false"/>
<preference name="DisallowOverscroll" value="true"/>
<preference name="BackupWebStorage" value="none"/>
<preference name="SplashScreen" value="screen"/>
<preference name="SplashScreenDelay" value="3000"/>
<feature name="StatusBar">
<param name="ios-package" value="CDVStatusBar" onload="true"/>
</feature>
<platform name="android">
<config-file target="AndroidManifest.xml" parent="/manifest/application/activity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.txt" />
<data android:host="*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:pathPattern=".*\\.txt" />
<data android:mimeType="*/*" />
</intent-filter>
</config-file>
<icon src="resources/android/icon/drawable-ldpi-icon.png" density="ldpi"/>
<icon src="resources/android/icon/drawable-mdpi-icon.png" density="mdpi"/>
<icon src="resources/android/icon/drawable-hdpi-icon.png" density="hdpi"/>
<icon src="resources/android/icon/drawable-xhdpi-icon.png" density="xhdpi"/>
<icon src="resources/android/icon/drawable-xxhdpi-icon.png" density="xxhdpi"/>
<icon src="resources/android/icon/drawable-xxxhdpi-icon.png" density="xxxhdpi"/>
<splash src="resources/android/splash/drawable-land-ldpi-screen.png" density="land-ldpi"/>
<splash src="resources/android/splash/drawable-land-mdpi-screen.png" density="land-mdpi"/>
<splash src="resources/android/splash/drawable-land-hdpi-screen.png" density="land-hdpi"/>
<splash src="resources/android/splash/drawable-land-xhdpi-screen.png" density="land-xhdpi"/>
<splash src="resources/android/splash/drawable-land-xxhdpi-screen.png" density="land-xxhdpi"/>
<splash src="resources/android/splash/drawable-land-xxxhdpi-screen.png" density="land-xxxhdpi"/>
<splash src="resources/android/splash/drawable-port-ldpi-screen.png" density="port-ldpi"/>
<splash src="resources/android/splash/drawable-port-mdpi-screen.png" density="port-mdpi"/>
<splash src="resources/android/splash/drawable-port-hdpi-screen.png" density="port-hdpi"/>
<splash src="resources/android/splash/drawable-port-xhdpi-screen.png" density="port-xhdpi"/>
<splash src="resources/android/splash/drawable-port-xxhdpi-screen.png" density="port-xxhdpi"/>
<splash src="resources/android/splash/drawable-port-xxxhdpi-screen.png" density="port-xxxhdpi"/>
</platform>
<icon src="resources/android/icon/drawable-xhdpi-icon.png"/>
</widget>
4条答案
按热度按时间dzhpxtsq1#
解决了!
我不能用爱奥尼亚或 cordova :这是一项PhoneGap功能(请参阅Stackoverflow answer)
我可以用另外两种方法来做:
1.使用自定义Cordova插件
1.使用挂钩
我更喜欢第二种方式。我找到了一个interesting hook来满足我的目的。注意:记住安装一些软件包:
遗憾的是这个钩子合并了标签。所以我写了一个稍微修改过的钩子版本:see here。您可以将此挂钩放在/hooks/after_platform_add中。
现在我在config.xml中有了我的意图过滤器配置:
我可以更新AndroidManifest.xml,重新生成Android平台:
v6ylcynt2#
Cordova 9现在直接支持使用
<config-file>
和<edit-config>
节,就像在plugin.xml文件中一样。不使用任何插件或挂钩,您可以直接执行以下操作,例如,向AndroidManifest.xml添加Intent过滤器:
不要忘记将属性
xmlns:android="http://schemas.android.com/apk/res/android"
添加到<widget>
标记中,以避免在构建时出现unbound prefix
错误。xkftehaa3#
我遇到了同样的问题,但是安装(然后记住或记录依赖关系)一堆npm依赖关系,然后使用一个大的通用钩子的想法对于我所需要的来说太重量级了。
钩子可以是简单的shell脚本,这通常是修改文本文件的一种更直接的方式。在我的例子中,我只需要在
MainActivity
活动中添加一个intent过滤器,这对于sed
来说是一项微不足道的工作;我刚刚创建了文件hooks/after_prepare/020_add_moozvine_intents.sh
,其内容为:您可以使用类似的方法对生成的文件进行任何简单的文本修改。
js81xvg64#
下面是Rich用JS为未来的Google员工编写的上述解决方案,因为我在shell脚本方面遇到了问题。
用这个作为你的后准备钩。
注意:这是ES6版本,您可以在此处找到ES5版本:https://gist.github.com/smowden/f863331034bf300b960beef1ae25bf82