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。

 

相关文章

HTML代码中要想改变字体颜色,常常需要使用CSS样式表。CSS是...
HTML代码如何让字体盖住图片呢?需要使用CSS的position属性及...
HTML代码字体设置 在HTML中,我们可以使用标签来设置网页中的...
在网页设计中,HTML代码的字体和字号选择是非常重要的一个环...
HTML(Hypertext Markup Language,超文本标记语言)是一种用...
外链是指在一个网页中添加一个指向其他网站的链接,用户可以...