Android中Intent的介绍

编程之家收集整理的这篇文章主要介绍了Android中Intent的介绍编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一.Intent的介绍

Intent的中文意思是“意图,意向”, Intent对AndroID的核心和灵魂,是各组件之间的桥梁。四大组件分别为Activity 、Service、broadcastReceiver、ContentProvIDer。

而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的AndroID应用。

Intent的中文意思为“意图”,在AndroID中可以理解为想要做什么,What do want to do? 所以什么时候要用到Intent就很好理解了。

Activity、Service和broadcast receiver之间是通过Intent进行通信的,而另外一个组件Content ProvIDer本身就是一种通信机制,不需要通过Intent。

 

二.公共构造函数

1、Intent() 空构造函数

2、Intent(Intent o) 拷贝构造函数

3、Intent(String action) 指定action类型的构造函数

4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvIDer

5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的

6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体

Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!

Intent(String action, Uri uri)  的action就是对应在AndroIDMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和category常量。

三.Intent的属性

Intent的相关属性

  • Intent由以下各个组成部分:
  • component(组件):目的组件
  • action(动作):用来表现意图的行动
  • category(类别):用来表现动作的类别
  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息(传值)
  • Flags(标志位):期望这个意图的运行模式

 

1.component:目的组件

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

  显示跳转

1、Intent跳转

    Intent intent =new Intent(源Activity的对象,目标Activity的class);

    startActivity(intent);

三种代码方式的跳转 其实代码都是一样

//No1

Intent intent = new Intent();

创建Intent组件来响应

 Componentname cpN = new Componentname(MainActivity.this, OtherActivity.class);

 intent.setComponent(cpN);

 startActivity(intent);

 //No2

 Intent intent = new Intent();

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

 startActivity(intent);

 //No3 更简单的

 Intent intent = new Intent(MainActivity.this, OtherActivity.class);

 startActivity(intent);

2.Action动作   用来表示意图的行动 不同应用之间使用Action跳转

category 类型 与Action是一起使用   不能少,也可以跳转,但是很含蓄

以下是Intent类中预定义的部分action:

ACTION_CALL--目标组件为activity, 代表拨号动作;

ACTION_EDIT--目标组件为activity, 代表向用户显示数据以供其编辑的动作;

ACTION_MAIN--目标组件为activity, 表示作为task中的初始activity启动;

ACTION_BATTERY_LOW--目标组件为broadcastReceiver, 提醒手机电量过低;

ACTION_SCREEN_ON--目标组件为broadcast, 表示开启屏幕.

3.data(数据):表示与动作要操纵的数据

    表示androID要访问的数据 也可以在intent_filter里面设置

  • type(数据类型):对于data范例的描写
  • 一个完整的Uri由scheme、host、port、path组成,格式是<scheme>://<host>:<port>/<path>

//No6 播放音乐

        Intent intent = new Intent(); 

        intent.setAction(Intent.ACTION_VIEW);

       // intent.setData(Uri.parse("file://storage/朋友.mp3"));

        intent.setDataAndType(Uri.parse("file://storage/朋友.mp3"), "audio/mp3");

        startActivity(intent);

4. category属性

Intent中的category属性一个执行动作Action的附加信息。比如:category_HOME则表示放回到Home界面,ALTERNATIVE_category表示当前的Intent是一系列的可选动作中的一个。下表是SDK文档中关于category的信息。

<category androID:name="androID.intent.category.DEFAulT"/>

<category androID:name="androID.intent.category.LAUNCHER" /> 系统启动

5. Type属性

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

6.Intent的Extra属性

Intent的Extra属性添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,就可以通过Extra属性添加subject和body。

 

// 调用浏览器

Uri webVIEwUri = Uri.parse("http://blog.csdn.net/zuolongsnail");

Intent intent = new Intent(Intent.ACTION_VIEW,webVIEwUri);

// 调用地图

Uri mapUri = Uri.parse("geo:100,100");

Intent intent = new Intent(Intent.ACTION_VIEW,mapUri);

// 播放mp3

Uri playUri = Uri.parse("file:///sdcard/test.mp3");

Intent intent = new Intent(Intent.ACTION_VIEW,playUri);

intent.setDataAndType(playUri,"audio/mp3");

// 调用拨打电话

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

Intent intent = new Intent(Intent.ACTION_DIAL,dialUri);

// 直接拨打电话,需要加上权限

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

Intent intent = new Intent(Intent.ACTION_CALL,callUri);

// 调用邮件这里要事先配置好的系统Email,否则是调不出发邮件界面的)

Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");

Intent intent = new Intent(Intent.ACTION_SENDTO,emailUri);

// 直接发邮件

Intent intent = new Intent(Intent.ACTION_SEND);

String[] tos = { "zuolongsnail@gmail.com" };

String[] ccs = { "zuolongsnail@163.com" };

intent.putExtra(Intent.EXTRA_EMAIL,tos);

intent.putExtra(Intent.EXTRA_CC,ccs);

intent.putExtra(Intent.EXTRA_TEXT,"the email text");

intent.putExtra(Intent.EXTRA_SUBJECT,"subject");

intent.setType("text/plain");

Intent.createChooser(intent,"Choose Email ClIEnt");

// 发短信

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.putExtra("sms_body","the sms text");

intent.setType("vnd.androID-dir/mms-sms");

// 直接发短信

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

Intent intent = new Intent(Intent.ACTION_SENDTO,smsToUri);

intent.putExtra("sms_body","the sms text");

// 发彩信

Uri mmsUri = Uri.parse("content://media/external/images/media/23");

Intent intent = new Intent(Intent.ACTION_SEND);

intent.putExtra("sms_body","the sms text");

intent.putExtra(Intent.EXTRA_STREAM,mmsUri);

intent.setType("image/png");

// 卸载应用

Uri uninstallUri = Uri.fromParts("package","com.app.test",null);

Intent intent = new Intent(Intent.ACTION_DELETE,uninstallUri);

// 安装应用

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromfile(new file("/sdcard/test.apk"),"application/vnd.androID.package-archive");

// 在AndroID Market中查找应用

Uri uri = Uri.parse("market://search?q=愤怒的小鸟");

Intent intent = new Intent(Intent.ACTION_VIEW,uri);

四.带返回结果的跳转

Intent intent = new Intent(MainActivity.this , OtherActivity.class);

//        startActivity(intent);

        //requestCode  int  请求码

        startActivityForResult(intent, requestCode);

必须覆写     当返回这个Activity的时候 响应

@OverrIDe

    protected voID onActivityResult(int requestCode, int resultCode, Intent data) {

        // Todo auto-generated method stub

        super.onActivityResult(requestCode, resultCode, data);

    }

再另一个Activity上  设置结果码

//resultCode  结果码

        this.setResult(resultCode)

//设置结果码切 往回传递数据

Intent in = new Intent();

        in.putExtra("test", test);

        this.setResult(2,in);

注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。

Intent Action 隐士跳转 自定义

调用系统的Action 其中系统的data type这些需要去查API

 

支付解锁全部内容

限时5折
¥9.9 ¥19.9

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

HTML相关文章

HTML邮件内容所在上下文或者说所在外部容器(以下简...
HTML内容类型决定使用的语义标签,在网页中某种类型...
HTML代码在书写的时候应该遵循什么规范?青岛星网今...