您的当前位置:首页Android中Intent的隐式启动和显示启动Activity

Android中Intent的隐式启动和显示启动Activity

2024-12-14 来源:哗拓教育

一、显示调用Intent

Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);

二、隐式启动Intent

Intent intent=new Intent("com.xu.mytest");
startActivity(intent);
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.xu.mytest"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

三、Activity 中 Intent Filter 的匹配过程 :

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri 
intent.setData(data);                
startActivity(intent); 

隐式启动会找到所匹配到的应用,并提示用户选择打开方式

如果有多个组件被匹配成功,就会以对话框列表的方式让用户进行选择。
每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确
在Intent添加类别可以添加多个类别,那就要求被匹配的组件必须同时满足这多个类别,才能匹配成功。操作Activity的时候,如果没有类别,须加上默认类别
当Intent匹配成功的组件有多个时,显示优先级高的组件,如果优先级相同,显示列表让用户自己选择
优先级从-1000至1000,并且其中一个必须为负的才有效
注:系统默认的浏览器并没有做出优先级声明,其优先级默认为正数。

显式启动:直接指定要跳转的Activity类名,不用过滤,效率高,适用于同一个应用中的不同Activity跳转
隐式启动:需要过滤,相对耗时,但可以找到所有之匹配的应用。适用于不同应用之间的Activity跳转。

<br />
Intent七大属性:由以下各个组成部分:

  • component(组件):目的组件
  • action(动作):用来表现意图的行动
  • category(类别):用来表现动作的类别
  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息
  • Flags(标志位):期望这个意图的运行模式

附:更多隐式Intent的用法举例

来看看intent中data属性包括:

  1. android:scheme
    用于指定数据的协议部分,如上例中的http部分
  2. android:host
    用于指定数据的主机名部分,如上例中的部分
  3. android:port
    用于指定主机名和端口之后的部分,一般紧随在主机名之后
  4. android:mimeType
    用于指定可以处理的数据类型,允许使用通配符的方式进行指定

如:传递手机拨号事件

Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.DIAL"/>
        <data android:scheme="tel"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
显示全文