0%

Android Scheme 未跳转到指定页面

一般配置

Android应用间跳转需配置Scheme,一般我们在启动Activity处增加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<activity
android:name=".singleactivity.WelcomeActivity"
android:configChanges="screenSize|orientation"
android:launchMode="singleTop"
android:screenOrientation="behind"
android:theme="@style/WelcomeTheme">
<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" />
<data android:scheme="putaoabc" />
</intent-filter>

</activity>

网页或其他应用跳转配置Uri:

1
pudaoabc://?xx=xx&xxx=xxx

实际在华为pad上的表现为:

  1. 如果应用没有在后台运行,那么跳转正常会正常吊起我们的应用并且在intent中拿到data参数。正常。
  2. 如果应用已经打开并在后台运行,那么跳转直接拉起APP但是并没有打开我们配置scheme的页面,因此就拿不到scheme中的数据。
分析

理论上在原生Android上配置了scheme的页面,外部掉起时理应打开的是我们配置的页面(Activity),因此此问题应该是软件厂商优化问题。

解决

由于我们设定了一个Mainactivity持久化在本地,因此把scheme设置在此页面下,那么在onCreate方法或onNewIntent中就能够拿到Scheme中的数据。

担忧

其他厂商的手机都能够正常在启动页通过Scheme的方式处理数据,如果使用此方式,那么应用跳转时(如果Main的启动模式为SIngleTask的话)会把MainActivity上的视图移除掉。

进一步分析

如果原方案,跳转时没有打开对应的页面,那么是否有可能在当前页面的onNewIntent中取到数据呢?不能。

总结

此问题发生在华为EMUI9.0版本 Android 9,对比了EMUI10.0版本Android 10 没有此问题,理论上Android版本的不同不会有此问题,难道是厂商魔改了。
最后,我还是修改成在MAIN中启动的方案。Android不同系统及厂商的适配没有最完美的适配方案,只能与业务结合判断使用哪种方案更优秀。当然,如果你有更好的解决方案请联系我。