摸鱼学Android 八(意图)

  • 意图(Intent)
  • 1 说明
  • 1.1 意图本身
  • 1.2 意图对象
  • 1.3 意图类型
  • 2 使用
  • 3 实例


意图(Intent)

1 说明

1.1 意图本身

意图是一个要执行的操作的抽象描述。
意图本身(一个 Intent 对象)是一个被动的数据结构,保存着要执行操作的抽象描述。
例如,有一个活动,需要打开邮件客户端并通过 Android 设备来发送邮件。为了这个目的,活动需要发送一个带有合适选择器的 ACTION_SEND 到 Android 意图处理者。指定的选择器给定合适的界面来让用户决定如何发送他的邮件数据。

1.2 意图对象

意图对象是一包的信息,用于组件接收到的意图就像 Android 系统接受到的信息。包括如下的组件,具体取决于要通信或者执行什么:

  • 动作(Action):这是意图对象中必须的部分,被表现为一个字符串。通过setAction()进行设置,getAction()获取。
  • 数据(Data):添加数据规格到意图过滤器。这个规格可以只是一个数据类型(如元类型属性),一条 URI ,或者同时包括数据类型和 URI 。setData()和getData()处理URI数据,setType()和getType处理元类型,setDataAndType()两者皆可。
  • 类别(Category):类别是意图中可选的部分,是一个字符串,包含该类型组件需要处理的意图的附加信息。处理方法为addCategory() 、removeCategory()、getCategories() 。
  • 附加数据(Extras):这是传递给需要处理意图的组件的以键值对描述的附加信息。通过putExtras()和getExtras()处理。
  • 标记(Flag):标记是意图的可选部分,说明Android系统如何来启动活动,启动后如何处理等。
  • 组件名称:组件名称对象是一个可选的域,代表活动、服务或者广播接收器类。

1.3 意图类型

意图分为显式意图和隐式意图。
显式意图用于连接应用程序的内部世界,这些意图通过名称指定目标组件,一般用于应用程序内部信息 - 比如一个活动启动一个下属活动或者启动一个兄弟活动。

// 通过指定类名的显式意图
Intent i = new Intent(FirstActivity.this, SecondAcitivity.class);

// 启动目标活动
startActivity(i);

隐式意图没有为目标命名,组件名称的域为空。隐式意图经常用于激活其他应用程序的组件。

Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);

2 使用

  • 可以通过 startActivity 来启动一个活动。
  • 可以通过broadcastIntent 来发送广播到任何对它感兴趣的广播接受器组件。
  • 可以通过startService(Intent) 或者bindService(Intent, ServiceConnection, int) 来与后台服务通讯。

3 实例

  1. MainActivity.java定义启动浏览器方法和启动电话方法
public void startWeb(View view) {
        Intent i = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
        startActivity(i);
    }

    public void startPhone(View view) {
        Intent i = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("tel:9510300000"));
        startActivity(i);
    }
  1. 修改activity_main.xml,添加2个按钮
<Button
            android:text="启动浏览器"
            android:id="@+id/button"
            android:onClick="startWeb"/>

    <Button
            android:text="启动电话"
            android:id="@+id/button2"
            android:onClick="startPhone"/>
  1. 运行程序,依次点击两个按钮 启动浏览器:

android 布局抓取 android意图抓取_android



  1. 启动电话:

android 布局抓取 android意图抓取_android_02