如何启动 Ionic 应用程序而不在 Web 视图中打开它?

How to launch an Ionic application and NOT open it in a web view?

我在同一个问题上卡了 2 天:(

我有两个 Ionic-PhoneGap 应用程序需要能够相互打开,不是在 WebView 中,而是在外部(如果应用程序已经 运行ning,它可以重新启动或继续 - 我会处理两者)。

经过数小时的研究,我发现使用 InAppBrowser (window.open(URL, _system)),我能够从外部打开我尝试过的每个商业应用程序(facebook、twitter、地图等)。同样的调用,当试图打开我的应用程序之一时,会在 Web 视图中打开它。

window.open("fb://", _system) -> opens Facebook separately.
window.open("myapp://", _system) -> opens my application in a web view.

我尝试修改 AndroidManifest.xmlconfig.xml,但几乎我更改的所有内容都被建筑物删除了。

例如,如果我将 "android:launchMode="singleTop" 更改为 "android:launchMode="singleTask" 并且我 运行 "Ionic build",我的更改将丢失..

有什么解决办法吗?

你应该看看这个插件:https://github.com/EddyVerbruggen/Custom-URL-scheme。您正在寻找的功能可以通过 URL 方案来实现。

此外,切勿直接修改 /platforms/ 文件夹中的文件。 Ionic (cordova) 生成这些文件,这就是您不断丢失更改的原因。如果你想编辑这些文件,你可以看看 cordova 的 hooks.

已找到解决方案!!!

需要在 app/config.xml 中添加那些行:

<preference name="AndroidLaunchMode" value="singleTask" />
<access origin="*" launch-external="yes" />

并在 app/platforms/android/AndroidManifest 中将 android:lauchMode 更改为 "Single Task"。xml :

...

<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:launchMode="singleTask" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"  android:label="@string/activity_name" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" 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>
    <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="fkapp" />
    </intent-filter>
</activity>

...

希望对大家有所帮助!!

要更改 launchMode 属性 在 ./config.xml 中添加以下内容:

<platform name="android">
    <preference name="android-launchMode" value="singleTask"/>
</platform>

还要确保编辑 ./hooks/after_prepare/030_update_platform_config.js。有线:​​

var preferenceMappingData = {
    'android': {
        ...
        'android-launchMode': {target: 'AndroidManifest.xml', parent: 'application/activity[@android:name=\'CordovaApp\']', destination: 'android:launchMode'},
        ...
    }
};

确保 parent 属性与 ./platforms/android/AndroidManifest.xml 中的 activity 正确对应。在我的例子中,我不得不将 \'CordovaApp\' 更改为 \'MainActivity\'

那么你只需 运行 ionic build android 并且 属性 应该在清单中更改。