Activity 启动方法

Activity启动方法

显式启动

startActivity(Intent(this, SecondActivity::class.java))

隐式启动

  • 隐式启动需要设置intent-filter,通过action、category、data过滤信息。
  • 跨应用的Activity启动就需要使用隐式intent。

action

  • 需要在AndroidManifest.xml文件中配置,可以配置多个
  • intent中的action值与清单文件的action值相同表示匹配成功
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitydemo.MY_ACTION" />
        <action android:name="com.example.activitydemo.MY_ACTION2" />
        
        <!-- 必须加上 -->
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
startActivity(intent)

category

  • 与action类似,可以在清单文件中配置多个
  • intent中的action是必须添加的,但是cateogry可以不用添加
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitydemo.MY_ACTION" />
        <action android:name="com.example.activitydemo.MY_ACTION2" />
        
        <!-- 必须加上 -->
        <category android:name="android.intent.category.DEFAULT" />
        
        <category android:name="com.example.activitydemo.MY_CATEGORY" />
        <category android:name="com.example.activitydemo.MY_CATEGORY2" />
    </intent-filter>
</activity>
val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
intent.addCategory("com.example.activitydemo.MY_CATEGORY")
startActivity(intent)

data

data由mimeType和URL组成

mimeType数据类型:image/jpeg  video/*等

URL数据格式:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

如:
content://com.example.project:200/folder/subfolder/etc
http://www.baidu.com:80/search/info
  • scheme:url的模式,如http、file等
  • host:url主机名,如”www.baidu.com“
  • port:url端口,如”80“
  • path:表示路径
  • pathPrefix:表示路径前缀
  • pathPattern:表示完整路径,包含通配符
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitydemo.MY_ACTION" />

        <!-- 必须加上 -->
        <category android:name="android.intent.category.DEFAULT" />

        <data
              android:host="www.123456.com"
              android:mimeType="image/*"
              android:path="/helloworld"
              android:port="800"
              android:scheme="abc" />
    </intent-filter>
</activity>
val intent = Intent()
intent.action = "com.example.activitydemo.MY_ACTION"
intent.setDataAndType(Uri.parse("abc://www.123456.com:800/helloworld"), "image/png")
startActivity(intent)

判断隐式启动是否成功

val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
intent.setDataAndType(Uri.parse("hello://www.123456.com"), "world/*")
val componentName: ComponentName? = intent.resolveActivity(packageManager)
if (componentName != null) {
    startActivity(intent)
} else {
    toast("隐式启动失败")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值