在Android中启动一个Activity(隐式启动),如果落地页>1,那么系统就会弹出选在弹窗,让你选择一个默认的落地页面,如图: 通过命令 dumpsys查看当前栈顶的Activity:
mResumedActivity: ActivityRecord{4650966 u0 android/com.android.internal.app.ResolverActivity t840}ResolverActivity这是系统Activity,专门处理偏好设置的页面。当隐式启动没有设置默认偏好的时候就会启动这个页面。
上面的例子中我在两个应用中注册了DeepLink,如下:
实际在开发中不能这么写,有可能没有落地页,那么就会报错,所以一般需要在启动的时候查询一下Intent是否存在接收方。
当我们没有设置偏好设置的时候,返回的是系统设置偏好的页面(ResolverActivity ):
2020-09-04 08:17:08.463 13352-13352/com.example.leakdemo D/zhangyu: resolveInfo:ResolveInfo{33175ae android/com.android.internal.app.ResolverActivity m=0x0}当我们设置了默认偏好: 结果如下:
2020-09-04 08:21:24.911 13678-13678/com.example.leakdemo D/zhangyu: resolveInfo:ResolveInfo{7c0b4c8 com.example.myapplication/.MainActivity m=0x508000}这个是否查询落地页就是目的页了,而不再是偏好设置页; 当然如果想删除这个偏好设置,需在【设置】-【应用管理】-【具体应用】-【默认打开】-【清除默认操作】:
设置一个错误的页面: 改成love404,这个协议没有注册
PackageManager pm = getPackageManager(); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("zy://wxf/love404?name=zhangyu&id=5201314")); ResolveInfo resolveInfo = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); Log.d("zhangyu", "resolveInfo:" + resolveInfo);结果如下:返回的resolveInfo:null,这种情况下在项目中一般就需要提示用户,不能直接跳转。
2020-09-04 08:18:45.616 13580-13580/com.example.leakdemo D/zhangyu: resolveInfo:null