1.Intent的作用
包装Android的组件
启动Activity,启动服务,发送广播
组件之间的传值
2. Intent
“显示”意图 :明确指定了要跳转的Activity(通常用于应用程序内容组件的跳转)
“隐式”意图: 不明确指定要跳转的Activity,而是通过Intent来描述动作(跨应用程序之间的跳转)
3 “显示”意图
写法1: Intent intent = new Intent(MainActivity.this,InfoActivity.class);
startActivity(intent);
写法2: Intent intent = new Intent();
intent.setClass(MainActivity.this,InfoActivity.class);
startActivity(intent)
写法3: ComponentName 包装android的组件(用于指定启动的组件)
Intent intent = new Intent();
ComponentName cName = new ConponentName(MainActivity.this,InfoActivity.class);
intent.setComponent(cName);
startActivity(intent);
4."隐式"意图
action 表示要启动的Activity想要完成什么动作. 经常用在隐式意图中
代码中可以设置action的意图
注意: 必须保证action在应用单中唯一性
ACTION_MAIN (android:intent.action.MAIN) : Android程序入口
ACTION_VIEW (android:intent.action.VIEW) : 显示指定的数据
ACTION_EDIT (android:intent.action.EDIT) : 编辑指定的数据
ACTION_DIAL (android:intent.action.DIAL) : 显示拨号面板界面
ACTION_CALL (android:intent.action.CALL) : 直接呼叫data中所携带的电话号码
ACTION_SEND (android:intent.action.SEND): 向其他人发送数据(彩信, email)
ACTION_SENDTO (android:intent.action.SENDTO) : 向其他人发生短信
category 为Action增加附加类别的信息
android.intent.category.LAUNCHER 程序入口, 优先级最高
android.intent.category.DEFAULT 默认的, 普通的Activity
A应用(启动者)
Intent intent = new Intent();
intent.setAction("com.qf.day06_lanuchmode.B");//必须要和被启动的action一致
startActivity(intent);
B应用(被启动者) 需要一个唯一的动作(action)
在清单文件中, <activity/> 标签中, 指定 action + category
<intent-filter>
<action android:name="com.qf.day06_lanuchmode.B"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
data 指定action后, 将必要的数据放入data中
比如: 拨打电话: 必须要有电话号码
打开网页: 必须要有网址
URI : 统一资源标识符(不同数据有不同的格式)
拨打电话: tel:110119120
网址: http://baidu.com
发送短信: smsto:10086
type 如果data属性为文件的路径, 那么需要通过type来指定类型
比如:
文本 text/*
图片 image/*
视频 video/*
音频 audio/*
package com.qf.day06_intent;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void clickButton(View v)
{
Intent intent = new Intent();
switch (v.getId()) {
case R.id.button_01:
//显示启动1
intent = new Intent(this,InfoActivity.class);
break;
case R.id.button_02:
//显示启动2
intent.setClass(this, InfoActivity.class);
break;
case R.id.button_03:
ComponentName componentName = new ComponentName(this, InfoActivity.class);
//设置Android包装的组件
intent.setComponent(componentName);
break;
case R.id.button_04:
intent.setAction("com.qf.day06_lanuchmode.B");//被启动的页面的清单文件中action中的name需要和这个一样,categary可以设置成默认
break;
case R.id.button_05:
//指定Intent的动作
intent.setAction(Intent.ACTION_VIEW);
//指定必要的数据
intent.setData(Uri.parse("http://baidu.com"));
break;
case R.id.button_06:
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://storage/sdcard/lf.jpg"), "image/*");
break;
case R.id.button_07:
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://storage/sdcard/123.txt"), "text/*");
break;
case R.id.button_08:
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://storage/sdcard/movei.mp4"), "video/*");
break;
case R.id.button_09:
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://storage/sdcard/wlxq.mp3"), "audio/*");
break;
case R.id.button_10:
intent.setAction(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:110"));
intent.putExtra("sms_body", "为了更好的学习, 咱们分手吧!!!");
break;
}
startActivity(intent);
}
}
附《Intent调用常见系统组件方法》