最近遇到了一个问题,想实现注销账号的功能,在子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);