博博blog 博博blog

Android - 使用Intent在活动之间穿梭

in 学习分享 read (248) 文章转载请注明来源!

##Intent
Intent大致分为两种:显示Intent隐式Intent
###显示Intent
Intent有多个构造函数的重载,其中一个
Intent(Context packageContext,Class<?>cls)

  1. 第一个参数要求提供一个启动活动的上下文,
  2. 第二个参数指定要启动的目标活动。

Activity类提供了一个startActivity()方法,
这个方法专门用于启动活动的,他接收一个Intent参数,将构建好的Intent传入。
修改按钮的点击事件:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);

###隐式Intent
隐式Intent它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的actioncategory等信息,交由系统分析找出更适合的活动启动。
<activity>标签下配置<intent-filter>的内容,
指定当前活动能够响应的action 和 category。
添加以下:

</activity>
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.bobo1998.test0420.ACTION_START" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

在标签中我们指明了当前活动能够响应的
actioncategory
只有这两个同时匹配上Intent中指定的两个,此活动才响应该Intent。
修改按钮点击事件:

Intent intent = new Intent("com.bobo1998.test0422.ACTION_START");
startActivity(intent);

使用了Intent的另一个构造函数,直接将action的字符串传入,表明我们想要启动能够响应com.bobo1998.test0422.ACTION_START
的活动。
标签内指定的category是一种默认的,在调用startActivityg()方法会自动将category添加到Intent中。

每个Intent智能指定一个action,但能指定多个category,按钮内增加一个。

Intent intent = new Intent("com.bobo1998.test0422.ACTION_START");
intent.addCategory("com.bobo1998.test0422.MY_CATEGORY");
startActivity(intent);

指定了一个自定义的category,但是程序会崩溃,没有任何一个活动可以响应我们的Intent,因为标签内没有声明响应这个category,所以在标签内添加一个category的声明:
<category android:name="com.bobo1998.test0422.MY_CATEGORY"/>
###更多隐式Intent的用法
使用隐式Intent不仅可以启动自己程序内的活动,也可以启动其他程序的活动。
修改按钮点击事件:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

指定了Intent的action是Intent.ACTION_VIEW
这是Android系统内置的一个动作,
常量值为:android.Intent.action.VIEW
然后通过Uri.parse()方法,将一个网址解析成Uri对象,在调用Intent的setData()方法将这个Uri对象传递进去。
setData(),接收一个Uri对象,主要用于指定当前Intent正在操作的数据,这些数据都是以字符串的形式传入到Uri.parse()方法中解析产生的。

我们还可以在<intent-filter>标签中配置一个标签,用于更精确的指定当前活动能够响应什么类型的数据。
只有标签中指定的内容和Intent中携带的Data完全一致,当前活动才能够响应该Intent。
新建一个活动,标签内配置:

<activity android:name=".ThirdActivity"
    android:label="This is ThirdActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="http"/>
    </intent-filter>
</activity>

配置了当前活动能够响应的action是android.intent.action.VIEW的常量值,
另外在<data>标签中通过android:scheme指定了数据协议必须是http协议。

我们还可以指定很多其他协议,比如拨号,修改按钮点击事件:

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

指定了Intent的action是Intent.ACTION_DIAL
这也是Android系统内置的动作,data部分指定了协议是tel号码是10086

学习分享android
PREVIOUS NEXT
雷姆
拉姆
音乐加载中...
0:00