Activity 启动方法

Activity启动方法

显式启动

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

隐式启动

隐式启动需要设置intent-filter,通过action、category、data过滤信息。

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:表示完整路径,包含通配符

定义URL

<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.baidu.com"
              android:scheme="http" />
    </intent-filter>
</activity>

val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
intent.setData(Uri.parse("http://www.baidu.com"))
startActivity(intent)

定义mimeType

<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activitydemo.MY_ACTION" />

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

        <data android:mimeType="image/*" />
    </intent-filter>
</activity>
val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
intent.setType("image/*")
startActivity(intent)

定义完整URL

<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="world/*"
              android:scheme="hello" />
    </intent-filter>
</activity>
val intent = Intent()
intent.setAction("com.example.activitydemo.MY_ACTION")
intent.setDataAndType(Uri.parse("hello://www.123456.com"), "world/*")
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("隐式启动失败")
}

猜你喜欢

转载自blog.csdn.net/qq_14876133/article/details/120532369