美文网首页
第二天:Intent学习记录详解

第二天:Intent学习记录详解

作者: 善水Android输出端 | 来源:发表于2017-05-07 13:14 被阅读0次

    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的启动活动传递数据

    相关文章

      网友评论

          本文标题:第二天:Intent学习记录详解

          本文链接:https://www.haomeiwen.com/subject/asaytxtx.html