安卓从module的Activity跳转到启动启动页Activity踩的坑

最近遇到了一个问题,想实现注销账号的功能,在子module中的Activity中实现注销账号的功能,然后跳转到登录界面的主代码区的Activity中,在跳转的时候发现了找不到R.layout.MainActivity,无法通过Intent去启动目标Activity。

最后发现了安卓中有一个这样的属性:

<intent-filter>
    <data android:scheme="scheme" android:host="main" android:path="/mainDetail" />
</intent-filter>

通过指定scheme方法可以跳转到目标Activity中,还能携带小数据,非常简单。


对于启动Activity来说需要注意一点,需要用两个筛选来进行过滤,因为不这样做会导致应用图标消失:

<activity
    android:name="com.main.MainActivity"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:theme="@style/TransparentStatusBarTheme">
    
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <data android:scheme="scheme" android:host="main" android:path="/mainDetail" />
        <!--下面这几行也必须得设置-->
        <category android:name="android.intent.category.DEFAULT"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>

</activity>


相当于有两个匹配规则,第一个规则是点击应用启动的,第二个规则是通过scheme和uri来定位启动。


在module的Activity中的用法:

val url = "scheme://main/mainDetail?"你好!我是从module传来的参数"";//这个就是刚刚前面在AndroidManManifest中设置的,问号后面的参数可带可不带,参考intent用法
intent = Intent(Intent.ACTION_VIEW,Uri.parse(url));
startActivity(intent);


上一篇:MacOS深色模式下微信文章页面背景变为黑色问题的解决


下一篇:H5项目适配系统深色模式方案总结