欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android笔记系列--Intent

程序员文章站 2024-02-13 20:37:28
...

分类:隐式 显式

隐式匹配

Action 该activity可以执行的动作

ACTION_CALL activity 启动一个电话. 
ACTION_EDIT activity 显示用户编辑的数据. 
ACTION_MAIN activity 作为Task中第一个Activity启动 
ACTION_SYNC activity 同步手机与数据服务器上的数据. 
ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告. 
ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告 
ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告. 
ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.

两条原则:
* 一条元素至少应该包含一个,否则任何Intent请求都不能和该匹配。
* 如果Intent请求的Action和中个任意一条匹配,那么该Intent就可以**该activity(前提是除了action的其它项也要通过)。

两条注意:如果Intent请求或中没有说明具体的Action类型,那么会出现下面两种情况。

  • 如果中没有包含任何Action类型,那么无论什么Intent请求都无法和这条匹配。
  • 反之,如果Intent请求中没有设定Action类型,那么只要中包含有Action类型,这个Intent请求就将顺利地通过的行为测试。

Category 指定当前动作(Action)被执行的环境

CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。表示所有intent都可以**它  
CATEGORY_HOME:设置该组件为Home Activity。 
CATEGORY_PREFERENCE:设置该组件为Preference。  
CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。表示该activity只能用来浏览网页。  
CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

注意:
如果该activity想要通过隐式intent方式**,那么不能没有任何category设置,至少包含一个android.intent.category.DEFAULT

Data 执行时要操作的数据

android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀
android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port 匹配url中的端口
android:path 匹配url中的路径

在XML中声明可以操作的data域应该是这样的:

<activity android:name=".TargetActivity"> 
<intent-filter> 
    <action android:name="com.scott.intent.action.TARGET"/> 
    <category android:name="android.intent.category.DEFAULT"/> 
    <data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target"/> 
</intent-filter> 
</activity>

注意:
这个标识比较特殊,它定义了执行此Activity时所需要的数据,也就是说,这些数据是必须的!!!!!所有如果其它条件都足以**该Activity,但intent却没有传进来指定类型的Data时,就不能**该activity!!!!

intent传递对象

Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte、byte[]、char、char[]、 boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、float[]、 double、double[]、String、String[],还有实现Serializable、Parcelable接口的类对象。

发送部分
CustomeClass 实现了Serializable接口
CustomeClass cc = new CustomeClass();  

Intent intent = new Intent(this, PersonInfo.class);  
intent.putExtra("PERSON_INFO", cc);  


接收部分
Intent intent = getIntent();  
CustomeClass cc = CustomeClass)intent.getSerializableExtra("PERSON_INFO");

常用

// 调用浏览器
Uri webViewUri = Uri.parse(“http://blog.csdn.net/zuolongsnail“);
Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);

// 调用地图
Uri mapUri = Uri.parse(“geo:100,100”);
Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);

// 播放mp3
Uri playUri = Uri.parse(“file:///sdcard/test.mp3”);
Intent intent = new Intent(Intent.ACTION_VIEW, playUri);
intent.setDataAndType(playUri, “audio/mp3”);

// 调用拨打电话
Uri dialUri = Uri.parse(“tel:10086”);
Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);
// 直接拨打电话,需要加上权限

相关标签: Intent