Android Intent详解

一、什么是Intent
一个意图是一个可以向组件 请求一个动作的 消息传递对象,即各组件使用Intent进行通信 。Intent促进组件之间的通信有这基本3个方面:
1.)启动Activity
startActivity()或者startActivityForResult()来启动一个Activity
2.)启动Service
startService()来初始化或者发送新的指令到正在运行的Service
bindService()来实例化并且绑定Service
3.)发送Broadcast
 sendBroadcast(), sendOrderedBroadcast()或者 sendStickyBroadcast().来发送广播到指定的BroadcastReceiver

二、显示Intent与隐式Intent的区别
显示Intent
通过组件的名称(组件的全类名)来指定目标的组件,在自己的应用程序中使用显示Intent启动一个组件,因为你知道你想要启动的Activity或者
Service的类名。
例如Activity启动其他的Activity或者Service,启动的组件只有一个。
隐式Intent
在启动组件的Intent中不指名组件的名称,而是指定Action、Data、
Category属性,然后当我们调用启动组件的方法时,就会
去AndroidManfiest.xml中相关组件的Intent-filter,逐一匹配出满足属性的组件。如果不止一个的话,会弹出让我们选择的对话框。
三、Intent的属性
ComponentName(组件名称)
即组件的名称,在AndroidManfiest.xml配置文件中设置的包名+组件的全限定类名组成,这是显式Intent需要的设置的唯一属性。
Intent中有setClass()、setClassName()、
setComponent()方法来设置,使用getComponent()方法获取
Action(动作)
一个普通的字符串,代表Intent要完成的一个抽象"动作"
比如发信息的权限,而具体的那个组件来完成,Intent并不负责,仅仅知道会有这个动作,谁来完成就交给Intent-filter进行筛选。
2种方式:
1.配置文件中
<action android:name="android.intent.action.CALL" />
2.代码中
intent.setAction(Intent.ACTION_CALL);
Category(种类)
一个普通的字符串,为Action提供额外的类别信息,两者通常结合使用,一个Intent对象只能有一个Action,但能有多个Category
2种方式:
1.配置文件中
<category android:name="android.intent.category.
DEFAULT" />
2.代码中
intent.addCategory(Intent.CATEGORY_DEFAULT)
DATA(数据)
Data通常用于向Action属性提供操作的数据,接受一个URI对象。
URI格式:scheme://host:port/path
 参数依次为:协议头、 主机、端口、路径

2种方式:
1.配置文件中
<data android:mimeType="Intent的Type属性"
      android:scheme="Data的scheme协议头"
      android:host="Data的主机号"
      android:port="Data的端口号"
      android:path="Data的路径"
      android:pathPrefix="Data的path前缀"
      android:pathPattern="Data属性的path的字符串模板"
                    />

2.代码中
intent.setDataAndType(data, type);
Type(MIME类型)
Type通常用于指定Data所制定的Uri队友的MIME类型
Extras(额外)
通常用于多个Activity之间的数据交换,Extras的属性是一个
Bundle对象,通过键值对进行数据存储。
Flags(标记)
表示不同来源的标记,多数用于Android如何启动Activity以及启动后如何处理。
比如:
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)相当于加载模式中的singleTop模式。

四、Inten的使用

显示Intent的使用

1.返回Home界面
Intent intent = new Intent();
intent .setAction(Intent.ACTION_MAIN);
intent .addCategory(Intent.CATEGORY_HOME);
startActivity(intent );
2.打开链接地址
Intent intent = new Intent();
intent .setAction(Intent.ACTION_VIEW);
intent .setData(Uri.parse("http://www.baidu.com"));
startActivity(intent );
3.启动Activity
Intent intent = new Intent(MainActivity.this,DemoActivity.class);
startActivity(intent );
隐式Intent的使用

功能所有Action为VIEW的Activity被筛选出来,由用户进一步选择:
核心代码流程:
建立第二个Activity的布局,与对应的Activity,在第一个Activity的按钮点击事件中添加一下代码:
Intent it = new Intent();
it.setAction(Intent.ACTION_VIEW);
startActivity(it);

最后在配置文件中添加以下代码:        
<activity android:name=".SecondActivity"
            android:label="第二个Activity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>          
        </activity>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值