android:intent用法

本文编写目的:供自己查阅

1、Intent在寻找目标组件的时候有两种方法:第一,通过组件名称直接指定;第二,通过Intent Filter过滤指定
(Component),和扩展信息(Extra)。

3、常见Action如下:
android.intent.action.MAIN 应用程序入口
android.intent.action.VIEW 显示数据给用户
android.intent.action.PICK 选择数据
android.intent.action.DIAL 直接打电话
android.intent.action.SEND 直接发短信
自定义ACTION 同时要设定 Category值为”android.intent.category.DEFAULT”

4、常见Data属性:
Data属性通常用于向Action属性提供操作的数据。包括了Uri类型数据和MIME Type类型数据.
Data属性接受一个Uri对象,一个Uri对象通常通过如下形式的字符串来表content://com.android.contacts/contacts/1
冒号前面大致指定了数据的类型,冒号后面是数据部分。
所以一个合法的Uri对象既可决定操作哪种数据类型的数据,又可指定具体的数据值。
content://contacts/people/1 联系人
tel:13069208531 电话
http://www.google.com 网站
file://sdcard/mymusic.mp3 MP3
geo:39.2456,116.3523 地图

如果没有明确的指定Intent的指向Data数据的Uri,那么可以给他指定Uri的属性,包括:scheme、host、port、path。 
一条Uri的结构是这样的:<scheme>://<host>:<port>/<path>
    <data android:scheme="content"
          android:host="com.icechen.mydemo"
          android:port="200"
          android:path="/folder/subfolder/etc"/>

5、Type属性:
Type属性则用于明确指定Data属性所指定数据的类型或MIME类型。
通常来说,当Intent不指定Data属性时,Type属性 才会起作用,否则Android系统会根据Data属性值来分析数据类
型。

6、Category属性
这是Action的附加信息,它可以进一步的明确一个Intent.
一般不要去在Intent中设置它,如果你写Intent的接收者,就在Manifest.xml的Activity的 IntentFilter中包含
android.category.DEFAULT,这样所有不设置 Category(Intent.addCategory(String c);)的Intent都会与这个Category匹
配。

7、Component 组件名跳转(常用)
当指定了这个属性后,系统将跳过匹配其他属性,而直接匹配这个属性来启动对应的组件。
启动Service必须指定Component,否则5.0及以上版本会报错。

8、Flag属性
通过setFlags(int)或者addFlags(int)可以把标签flags用在Intent中。
FLAG_ACTIVITY_CLEAR_TOP 相当于Single_Task
FLAGE_ACTIVITY_SINGLE_TOP 相当于Single_Top
FLAG_ACTIVITY_NEW_TASK 类似于Single_Instance
FLAG_ACTIVITY_NO_HISTORY 离开该Activity后,该Activity将被从任务栈中移除

9、在使用INTENT时,为了防止找不到组件而崩溃,可以加个保护,如下:
ComponentName name = intent.resolveActivity(getPackageManager());
if(name != null){
//使用该INTENT
}

10、intent传递对象
发送:
Intent intent = new Intent();
intent.setClass(Login.this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(“user”, user);
intent.putExtras(bundle);
this.startActivity(intent);
接收:
Intent intent = this.getIntent();
user=(User)intent.getSerializableExtra(“user”);

补充:

如果传递的是List,可以把list强转成Serializable类型,而且object类型也必须实现了Serializable接口

Intent.putExtras(key, (Serializable)list)
接收

(List)getIntent().getSerializable(key)

补充:intent可直接传递Bitmap,因为Bitmap实现了序列化。不能直接传递Drawble,Drawble没有实现序列化。
intent传递数据的大小不要超过1000KB,否则可能引起程序崩溃。

猜你喜欢

转载自blog.csdn.net/xdy1120/article/details/81283413
今日推荐