栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第四章:Android好东西之Intent

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第四章:Android好东西之Intent

Intent 概述

•Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。

•Intent由动作、数据、分类、类型、组件、扩展信息、标记等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。

Action属性


•Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)等。

•通常与Data一般匹配使用

打开拨号页面ACTION_DIAL

   Intentintent= new Intent();

       intent.setAction(Intent.ACTION_DIAL);

       startActivity(intent);

一、

   Uriuri= Uri.parse("tel:10086");

  Intentintent= new Intent(Intent.ACTION_CALL,uri);

  startActivity(intent);

二、

  Manifest里需要添加CALL_PHONE权限

 

android:name="android.permission.CALL_PHONE">

三、

  危险权限需要动态申请。

Data属性

打开拨号页面,自动添加号码

       Intentintent =

new Intent();

       intent.setAction(Intent.ACTION_DIAL);

       Uriuri= Uri.parse("tel:10086");

       intent.setData(uri);

       startActivity(intent);


发送短信,自动添加号码

       Uriuri= Uri.parse("smsto:10086");

       Intentintent =

new Intent();

       intent.setAction(Intent.ACTION_SENDTO);

       intent.setData(uri);

       startActivity(intent);


Category属性


•Category属性指明一个执行Action的分类

•Intent中定义了一系列Category属性常量

按home键时启动自己做的应用

 


Component属性


一、Component属性用于指明Intent的目标组件的类名称。

二、通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。

三、根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:

显式Intent,这种方式通过直接指定组件名称Component来实现;

隐式Intent,这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。

显式Intent通过setComponent()、setClassName()或setClass()设置组件名


一、

   Intent intent = new Intent();

   ComponentName name = newComponentName(IntentActivity.this,MainActivity.class);

   intent.setComponent(name);

   startActivity(intent);

二、

   Intent intent = new Intent();

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

三、

   Intent intent = new Intent();

   intent.setClassName(IntentActivity.this,"com.ugrow.day02.MainActivity");



Extra属性

Extra属性用于添加一些附加信息

通过使用Intent对象的putExtra()方法来添加附加信息

Intent intent = new Intent();

intent.putExtra("name","zhangsan");

通过使用Intent对象的getXXXExtra()方法可以获取附加信息。

例如,将上面代码存入Intent对象中的人名获取出来,

因存入的是字符串,所以可以使用getStringExtra()方法获取数据

String name=intent.getStringExtra("name");

Extra属性 Bundle

  存:

   Intentintent = new Intent();

  Bundlebundle =

new Bundle();

   bundle.putString("user",user.getText().toString());

   bundle.putString("pwd",pwd.getText().toString());

   intent.putExtras(bundle);

取:

  Bundle extras =getIntent().getExtras();

  String user =extras.getString("user");

  Stringpwd = extras.getString("pwd");

Type属性

                   Intent intent = new Intent();

                Uri uri =Uri.parse("file:///data/vivo.mp4");

               intent.setAction(Intent.ACTION_VIEW);

                intent.setDataAndType(uri,"video/*");

                startActivity(intent);


Flag属性

Flag属性用来设定Activity的启动模式,与清单文件中的设置launchMode属性值相同

 Intentintent = new Intent();

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Intent.FLAG_ACTIVITY_CLEAR_TOP      =     singleTask  

Intent.FLAG_ACTIVITY_SINGLE_TOP    =     singleTop

Intent.FLAG_ACTIVITY_NEW_TASK       =     singleInstance

Permission


Action 属性

一、

   Uriuri= Uri.parse("tel:10086");

  Intentintent= new Intent(Intent.ACTION_CALL,uri);

  startActivity(intent);

二、

  Manifest里需要添加CALL_PHONE权限

 

android:name="android.permission.CALL_PHONE">

三、

  危险权限需要动态申请。

Permission


权限申请:Android

6.0 (API23)开始引入了权限申请机制,将所有权限分成了正常权限和危险权限

1、Manifest添加权限

   

2、判断系统是否大于等于6.0     

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            // 系统大于等于6.0

        } else {

          // 小于6.0 

        }

3、检查是否拥有此权限

4、申请权限

ActivityCompat.requestPermissions(PermissionActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);

5、权限回调  重写onRequestPermissionsResult

Intent启动

Intent启动不同组件的方法:

启动Activity

A页面跳转B页面

 一、A页面传值给B页面

        startActivity()   (putExtra,Bundle)

 二、B页面传值给A页面

        startActivityForRestult()

      setResult(resultCode,Intent)

      onActivityResult

一、Intent intent = new Intent();

      intent.setClass(LoginActivity.this,IntentActivity.class);

      startActivityForResult(intent,1000);

二、 Intent intent = new Intent();

      intent.putExtra("message","消息已收到");

      setResult(1001,intent);

      finish();

三、protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == 1000 && resultCode == 1001){

            String message = data.getStringExtra("message");

            Log.d("TAG","message=="+message);

        }

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号