我一直在尝试在反应原生应用程序中进行深度链接,并尝试直接在导航器中打开屏幕。我使用react-native-deep-linking
和react-navigation
作为库。还使用了嵌套导航器。深层链接工作正常,除了我对android:launchMode
属性有一些问题。
这是我为每个android:launchMode
选项得到的结果。
android:launchMode="standard"
- 应用程序使用深度链接打开,但打开一个全新的应用程序。android:launchMode="singleTask"
- 使用深层链接打开应用程序。如果我使用另一个链接打开应用程序。应用程序来到前台,但它定向到上一个链接。android:launchMode="singleTop"
- 应用程序使用深度链接打开,但打开一个全新的应用程序。android:launchMode="singleInstance"
- 应用程序使用深度链接打开,但打开一个全新的应用程序。
如果我删除android:launchMode
属性,再次发生与"标准"模式相同的情况,因为它是默认值。
我可以使用什么选项来解决此问题?在主要活动内部,我可以做任何@override吗?
下面是我的安卓清单.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>
不确定是否仍然相关,但将来可能会帮助某人。
原因是,当活动处于标准模式以外的任何模式时,从后台重新打开应用不会取代用于从终止状态启动应用的原始意图。相反,这些新意向将定向到onNewIntent(Intent intent)
方法。在那里,您可以调用setIntent(Intent intent)
以便将活动的意图替换为新的意图。
您可以在 MainActivity 中重写此方法。(请注意,在 React 中覆盖此方法时,我必须使其public
而不是像通常在 Android 中那样protected
。还不知道为什么(
阅读更多 - https://developer.android.com/reference/android/app/Activity#onNewIntent(android.content.Intent(