反应本机深层链接和android:launchMode问题

时间:2019-10-10 07:14:58

标签: android react-native android-intent android-activity mobile

我一直在尝试在本机应用程序中进行深层链接,并尝试直接在导航器中打开屏幕。我将react-native-deep-linkingreact-navigation用作库。还使用嵌套导航器。除非我在android:launchMode属性方面遇到一些问题,否则深层链接可以正常工作。

这是我为每个android:launchMode选项获得的结果。

  • android:launchMode="standard"-应用使用深度链接打开,但打开了一个全新的应用。
  • android:launchMode="singleTask"-应用使用深度链接打开。如果我使用其他链接打开应用程序。应用程序进入前台,但它指向上一个链接。
  • android:launchMode="singleTop"-应用使用深度链接打开,但打开了一个全新的应用。
  • android:launchMode="singleInstance"-应用使用深度链接打开,但打开了一个全新的应用。

如果我删除了android:launchMode属性,由于它是默认模式,因此同样会发生与“标准”模式相同的事情。

我可以使用什么选项解决此问题?在主要活动中我可以做任何@override吗?

下面是我的AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
        android:name=".MainApplication"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:allowBackup="false"
        android:theme="@style/AppTheme">
    <activity
            android:name=".MainActivity"
            android:launchMode="singleTask"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <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"/>
            <category android:name="android.intent.category.VIEW"/>

            <data android:scheme="https" android:host="*.myapplive.com" android:pathPrefix="/"/>
            <data android:scheme="https" android:host="*.myapp.com" android:pathPrefix="/"/>
        </intent-filter>
    </activity>
    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
</application>

1 个答案:

答案 0 :(得分:2)

不确定是否仍然有用,但将来可能会帮助某人。

原因是,当活动处于标准以外的任何其他模式时,从后台重新打开应用程序将不会替换用于从终止状态启动应用程序的原始意图。相反,这些新的意图将被定向到onNewIntent(Intent intent)方法。在那里,您可以致电setIntent(Intent intent),以将活动的意图替换为新的意图。

您可以在MainActivity中重写此方法。 (请注意,在React中重写此方法时,我必须使其变为public而不是protected,就像我通常在Android中那样。不确定为什么)

在此处了解更多-https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent)