Android Intent:不同应用程序之间通信的桥梁

一、初识Intent

Intent 被译作“意图”,在 Android 中提供了 Intent 机制来协助应用间的交互与通信。
Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。
Intent 不仅可用于应用程序之间,也可用于应用程序内部 Activity/Service 之间的交互。因此,可以将 Intent 理解为不同组件之间通信的“媒介”,专门提供组件互相调用的相关信息。

应用:

1、用来开启Activity。例如根据账号密码登录到相应的用户界面。

2、开启service。例如 点击下载,开始下载服务。

3、发送广播。

二、Intent对象的属性

Intent 是对它要完成的动作的一种抽象描述,Intent 封装了它要执行动作的属性:Action(动作)、Data(数据)、Category(类别)、Type(类型)、Component(组件信息)和 Extras(附加信息)。

1、Component(组件信息)

Intent 的 Compotent 属性指定 Intent 的目标组件的类名称。

通过方法setComponent()设置。可以实现启动另一个Activity。

            Intent intent = new Intent();
            //第一个参数是当前文件的包名,第二个参数是目标文件的包名
            ComponentName componentName = new ComponentName("com.example","com.example.DemoActivity");
            intent.setComponent(componentName);
            startActivity(intent);

2、Action(动作)、Data(数据)

动作名称动作功能
ACTION_M AIN 作为一个主要的进入口,而并不期望去接受数据
ACTION_VIEW 向用户去显示数据
ACTION_ATTACH_DATA 别用于指定一些数据应该附属于一些其他的地方,例如,图片数据应该附属于联系人

ACTION_EDIT

访问已给的数据,提供明确的可编辑

等等,还有很多。

Intent 的 Data 属性是执行动作的 URI 和 MIME 类型,不同的 Action 有不同的 Data 数据指定。

实例:使用Intent实现拨打电话和发送短信等内容。

在xml布局文件中已经添加了两个表示打电话和发送短信的按钮。

在Java中的代码

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //实现打电话发短信功能
        Button btn_phone = findViewById(R.id.btn_phone);
        Button btn_email = findViewById(R.id.btn_email);

        btn_phone.setOnClickListener(l2);
        btn_email.setOnClickListener(l2);

    }

    //电话短信的监听器对象
    View.OnClickListener l2 = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            Button button = (Button)v;
            switch (button.getId()){
                case R.id.btn_phone:
                    //打电话的固定格式,Uri.parse("tel:phone number")
                    intent.setAction(intent.ACTION_DIAL);
                    intent.setData(Uri.parse("tel:1111-1111"));
                    startActivity(intent);
                    break;
                case R.id.btn_email:
                    //打电话的固定格式,Uri.parse("smsto:phone number")
                    intent.setAction(intent.ACTION_SENDTO);
                    intent.setData(Uri.parse("smsto:1111-1111"));
                    //默认的短信内容
                    intent.putExtra("sms_body","Welcome to Android!");
                    startActivity(intent);
                    break;
            }
        }
    };
}
View Code

但这些还不够,还需要在AndroidManifest.xml中注册权限。

添加代码在<manifest></manifest>中

        <!--  打电话和发送短信的权限  -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>

3、Action(动作)、Category(类别)

Android提供了很多Category常量。

Intent 中的 Category 属性起着对 Action 补充说明的作用。
通过 Action,配合 Data 或 Type 可以准确表达出一个完整的意图(加一些约束会更精准)。Intent 中的 Category 属性用于执行 Action 的附加信息。
例如,CATEGORY_LAUNCHER 表示加载程序时 Activity 出现在最上面,_HOME 表示回到 Home 界面。

4、Extras(附加信息)和Flag(标记)

Intent 的 Extra 属性用于添加一些组件的附加信息。
比如,要通过一个 Activity 执行“发送电子邮件”这个动作请求,可以将电子邮件的 subject、body 等保存在 Extras 里,传给电子邮件发送组件。

Extras方法为putExtras()和setExtras().

Flag方法为putFlag()和setFlag().

例如:

intent.setFlags(intent.FLAG_ACTIVITY_NO_HISTORY);  //表名该activity不在历史栈中保留,用户一旦离开,就自动关闭该activity。

三、intent种类

1、显示Intent

2、隐式intent

3、区别

 综上。

原文地址:https://www.cnblogs.com/dongao/p/12250096.html