zoukankan      html  css  js  c++  java
  • 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、区别

     综上。

  • 相关阅读:
    hdu2063 匈牙利算法 二分最大匹配模版题
    经典dp 编辑距离
    新博客的第一道题 蓝桥杯 蚂蚁感冒
    cv.GaussianBlur参数选择 && contrast stretching
    大数据 week2 Hadoop and HDFS
    大数据 week2 Hadoop and HDFS
    抖音二面记录
    weight decay
    Pillow Image Filter
    UNSW CV第三课 下
  • 原文地址:https://www.cnblogs.com/dongao/p/12250096.html
Copyright © 2011-2022 走看看