【Android】Intent

目录

1. 什么是Intent

2. Intent 的相关属性

2.1 Activity 中 Intent Filter 的匹配过程:

2.2 Intent由以下各个组成部分:Intent分为直接 Intent 和间接 Intent

3. Intent 的应用

3.1 显示网页

3.2 拨打电话

3.3 调用发送短信程序

3.4 发送短信

3.5 播放多媒体

3.6 uninstall 程序

3.7 安装 apk


1. 什么是Intent

Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity,service(服务)和broadcast receiver(广播接收器)之间的交互。Intent这个英语单词的本意是“目的、意向、意图”。

Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。

 

2. Intent 的相关属性

2.1 Activity 中 Intent Filter 的匹配过程

 

2.2 Intent由以下各个组成部分:Intent分为直接 Intent 和间接 Intent

   2.2.1、component(组件):目的组件

     通过组件名称直接查找组件

// 全写:
Intent intent = new Intent();
ComponentName componentName = new ComponentName(this,MainActivity5_1.class);
intent.setComponent(componentName);

// 简写:
Intent intent = new Intent(this,MainActivity5_1.class);

// 显示
startActivity(intent);

   2.2.2、Action(动作):用来表现意图的行动

     通过Action属性间接查找组件。

     通过属性查找组件时需要在配置文件对应的Activity中添加过滤器,并设置命名及分组类别(必须写分组类别)。

     当有多个Activity具有相同的命名时,会去询问用户进行选择。除非某个Activity的过滤器设置了priority属性且值为负数。

// 全写
Intent intent = new Intent();
intent.setAction("com.jiinng.action.MY_ACTION");

// 简写
Intent intent = new Intent("com.jiinng.action.MY_ACTION");

// 显示
startActivity(intent);
<!-- 对应Activity的过滤器 -->
<intent-filter>
    <action android:name="com.jiinng.action.MY_ACTION"/>
    <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

   2.2.3、category(类别):用来表现动作的类别

     通过category查找与action大致相同

intent.addCategory("android.intent.category.DEFAULT");

   2.2.4、data(数据):表示与动作要操纵的数据

     Data属性是Android要访问的数据,和action和Category声明方式相同,也是在<intent-filter>中。例如:

<activity android:name="FourthActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"></action>
        <data android:scheme="http" android:path="www.google.com"/>
    </intent-filter>
</activity>

     若多个组件匹配成功显示优先级高的,相同显示列表。

     一般配合action使用(此组合是最常用的方法)。当action的属性值为android.intent.action.VIEW时,则会打开相应的网站。

Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri data = Uri.parse("http://www.google.com");
intent.setData(data);
startActivity(intent);

   2.2.5、type(数据类型):对于data范例的描写,表示数据的类型

不能单独设置type

// intent.setData(data); // 会把type设置为null
// intent.setType(); // 会把data设置为null

// 要使用data和type,必须使用以下方法,匹配时必须两者同时匹配才能通过
intent.setDataAndType(data,"text/html");

   2.2.6、extras(扩展信息):扩展信息

     与Activity中的相似。


   2.2.7、Flags(标志位):期望这个意图的启动模式

     一个程序启动后系统会为这个程序分配一个task供其使用,另外同一个task里面可以拥有不同应用程序的activity。那么,同一个程序能不能拥有多个task?这就涉及到加载activity的四种模式:standard、singleTop、singleTask、singlelnstance。
可以在AndroidManifest.xml中ctivity标签的属性launchMode中设置该activity的加载模式。简述下这四种模式的区别:

standard模式默认的模式,以这种模式加载必定会构造一个新的 Activity 实例放到目标task中的 activity 栈顶,不管当前task的栈顶是什么情况。
singleTop模式这种模式与 standard 模式类似,区别在于加载 activity 会多个判断步骤。判断需要加载的新 activity 与当前 task 栈顶的 activity 是不是同一个,相同的话就不再构造新的 activity ,并调用这个 activity i的newInstance()方法,不相同就还是会构造新的 activity 放到秩顶。
singleTask模式这种模式下,会 创建一个新的 task 来加载这个 activity,并且这个 task 中只允许存在一个 Activity 的一个实例(以后可以加载其他activity 的实例)。如果 activity 之前已经存在,会把该 Activity 之上的所有 Activity 清除,显示当前Activity。
singlelnstance模式新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。

 

3. Intent 的应用

3.1 显示网页

Uri uri=Uri.parse("http://www.baidu.com");
Intent it=new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);

3.2 拨打电话

如果直接拨打需在配置文件中添加  

<uses-permission android:name="android.permission.CALL_PHONE" />

Uri uri=Uri.parse("tel:xxxxxx");
// 1. 打开拨号面板
Intent it=new Intent(Intent.ACTION_DIAL,uri);
// 2. 直接拨打电话
Intent it=new Intent(Intent.ACTION_DIAL,uri);
startActivitylit);

3.3 调用发送短信程序

Intent it=new Intent(Intent. ACTION_VIEW); 
it. putExtra("sms_body","The SMS text"); 
it. setType("vnd.android-dir/mms-sms"); // 此句固定写法
startActivity(it);

3.4 发送短信

Uri uri=Uri. parse("smsto:0800000123");
Intent it = new Intentl(Intent.ACTION_SENDTO,uri); 
it. putExtra("sms_body","The SMS text"); 
startActivitylit);

3.5 播放多媒体

Uri uri=Uri.parse("file:///sdcard/spng.mp3");
Intent it=new Intent(Intent.ACTION_VIEW,uri);
// it.addFlags(it.FLAG_ACTIVITY_NEW_TASK);// 非必须选项
it.setDataAndType(uri,"audio/mp3");
context.startActivity(it);

3.6 uninstall 程序

Uri uri=Uri.parse("package:com.vince.hello"); // 卸载的包名:package:com.vince.hello
Intent intent = new Intent(Intent.ACTION_DELETE, uri); 
startActivity(intent);

3.7 安装 apk

Uri uri=Uri. fromFile(file); 
Intent intent =new Intent(Intent. ACTION_VIEW); 
intent. setDataAnd Type(uri,"application/vnd. android. package-archive"); // type是固定的
startActivity(intent);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值