第二天:Intent学习记录详解

2017-05-07  本文已影响0人  善水Android输出端

1、什么是Intent

首先,Intent翻译作意图,对于 初次接触,我们可以理解做发起请求让其他组件或活动执行某一动作。Intent是Android应用程序中组件与组件(活动和活动之间通信的中间桥梁);不仅可以指定组件的特定动作执行,还可以在不同Activity之间传递数据。一般情况下,Intent用于启动活动、启动服务以及发送广播。

1.1、Intent有显示和隐式之分,下面 我们先介绍一下显示Intent的用法

Intent intent=new Intent();//先创建一个Intent对象

//指定Intent要执行的动作

intent.setClass(MainActivity.this,SecondActivity.class);

//启动Intent

startActivity(intent);

Intent有多个构造函数,我们选择最基本的来说,Intent(Context packageContent ,class<?>cls);

该构造方法接受两个参数,其中Context packageContent 是为其指定当前启动活动的上下文对象,我们一般就选择当前活动的上下文对象MainActivity.this;另外接收的第二个参数是class<?>cls;该参数是我们要跳转的目标活动(SecondActivity)。

这样理解来看,我们“意图”就体现的很明确了。最后我们通过startActivity()这一方法来启动intent.此方法接收我们创建的intent对象作为启动的参数。、

2、隐式Intent

相比于显式Intent,隐式Intent则更加丰富含蓄。他的意图并不明确指定我们要启动的Activity,而是在Activity的清单配置文件中进行声明响应:

在AndroidMainfest文件下,通过在Activity的标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。在AndroidMainfest.xml文件下,我们添加上如下代码

<activity android:name=".SecondActivity ">

<intent-filter>

<action android:name="com.example.activitytest.ACTION._START"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

</actiivity>

只有<action>和<category>中的内容能够完全匹配上intent中指定的action和category时,这个活动才能够响应该intent.所以在FirstActivity中我们这样写:

button1.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

Intent intent=new Intent("com.example.activitytest.ACTION._START");

startActivity(intent);

}

});

在这个activity中我们创建了一个新的Intent。并把我们在AndroidMianfes 中的SecondActivity的action:(com.example.activitytest.ACTION._START)传入作为启动Intent的参数。

另外由于我们的category声明了是Default属性,所以在intent中,我们不需要改动,而是在StratActivity()函数的回调中,intent直接载入category就行。

同时,我们也是可以自己定义category的,如下:

button1.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View view) {

Intent intent=new Intent("com.example.activitytest.ACTION._START");

intent.addCategory("com.example.activitytest.MY_CATEGORY");

startActivity(intent);

}

});

此时需要注意的是:我们必须在清单文件中为其声明注册这个category

<category android:name="com.example.activitytest.MY_CATEGORY"/>


3、intent的更多用法:

显示网页

Intent it = new Intent(Intent.ACTION_VIEW);

intent.setData( Uri.parse("http://www.baidu.com"));

startActivity(intent);

为了让程序知道这是一个Http请求,我们需要在 清单文件声明data的数据协议

<data android:scheme="http"/>

打开拨号界面

Intent intent =new Intent(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:10086"));

startActivity(intent);

直接调用拨打电话

Intent intent =new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:10086"));

startActivity(intent);

//要使用这个必须在配置文件中加入相应的permission

调用发送短信的程序

Intent it = new Intent(Intent.ACTION_VIEW);

it.putExtra("sms_body", "The SMS text");

it.setType("vnd.android-dir/mms-sms");

startActivity(it);

发送短信

Uri uri = Uri.parse("smsto:0800000123");

Intent it = new Intent(Intent.ACTION_SENDTO, uri);

it.putExtra("sms_body", "The SMS text");

startActivity(it);

下一节我们继续Intent的启动活动传递数据

上一篇下一篇

猜你喜欢

热点阅读