intent在android中的作用,Android开发理解Intent的用途

1.Intent的定义

Intent这个单词的意思就是"意图,目的,意向",Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。

Intent是由以下组件组成:

component(组件):目的组件

action(动作):用来表现意图的行动

category(类别):用来表现动作的类别,或范畴

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

type(数据类型):对于data范例的描写

extras(扩展信息):扩展信息

Flags(标志位):期望这个意图的运行模式

Android官方定义Intent 是用于通过描述某个"意图"对象中执行的简单操作(如“查看地图”或“拍摄照片”)来启动另一应用中的某个 Activity。 这种 Intent 称作"隐式"Intent,因为它并不指定要启动的应用组件,而是指定一项"操作"并提供执行该操作所需的一些数据。

当调用 startActivity() 或 startActivityForResult()并向其传递隐式 Intent 时,系统会将Intent解析为可处理该 Intent 的应用并启动其对应的 Activity。 如果有多个应用可处理 Intent,系统会为用户显示一个对话框,供其选择要使用的应用。

注意:如果设备上没有可接收隐式 Intent 的应用,应用将在调用 startActivity() 时崩溃。如需事先验证是否存在可接收 Intent 的应用,需要对 Intent对象调用 resolveActivity()。如果结果为非空,则至少有一个应用能够处理该 Intent,并且可以安全调用 startActivity(),如果结果为空,则不应使用该 Intent。如有可能,应停用调用该 Intent 的功能。

1.1.隐式Intent

举个例子,某天你说"我想找个朋友打羽毛球"。你说的这句话就是一个隐式的意图Intent,"打羽毛球"是隐式意图Intent的一个Action,"我"是一个ActivityA,"朋友"是另外一个未知的ActivityB。要通过"打羽毛球"这个Action去找到这个"朋友",如果恰好我的朋友小王也想打羽毛球,那么"小王"就是这个具体的ActivityB,此时,我们一拍即合,就能完成打羽毛球这项运动了,也就完成了一个隐式的Intent。

还有一种情况,如果小王,小张,小李都想和你打羽毛球,那么你只能从中选择一个人和你打。也就是说ActivityA的过滤到ActivityB,ActivityC,ActivityD三个可启动的Activity,那么系统会弹出选择框,只能选择其中的一个Activity进行启动。

1.2.显示的Intent

举个例子,某天你说"我想和小王打羽毛球"。此时"打羽毛球"是一个显示意图Intent,"我"是ActivityA,"小王"就是ActivityB,此时,你不需要通过Action去匹配,只需直接和小王完成打羽毛球运动就成了,这也就完成了一个显示的Intent。

2.Intent的简单使用

这里介绍几种可用于执行常见操作的隐式 Intent,按处理 Intent 的应用类型分成不同部分。 此外,每个部分还介绍如何创建 Intent 过滤器来公布应用执行相应操作的能力。

2.1.相机

拍摄照片或视频并将其返回

如需打开相机应用并接收拍摄的照片或视频,则使用 ACTION_IMAGE_CAPTURE或 ACTION_VIDEO_CAPTURE操作。此外,还可在 EXTRA_OUTPUT

extra 中指定相机将拍摄的照片或视频保存到的 URI 位置。

示例

static final int REQUEST_IMAGE_CAPTURE = 1;

static final Uri mLocationForPhotos;

public void capturePhoto(String targetFilename) {

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT,

Uri.withAppendedPath(mLocationForPhotos, targetFilename));

if (intent.resolveActivity(getPackageManager()) != null) {

startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);

}

}

@Override

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

if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

Bitmap thumbnail = data.getParcelable("data");

// Do other work with full size photo saved in mLocationForPhotos

...

}

}

2.2.打开特定设置

有时应用要求用户更改内容时打开某个系统设置屏幕,请使用下列其中一个 Intent 操作打开与操作名称对应的设置屏幕。

ACTION_SETTINGS

ACTION_WIRELESS_SETTINGS

ACTION_AIRPLANE_MODE_SETTINGS

ACTION_WIFI_SETTINGS

ACTION_APN_SETTINGS

ACTION_BLUETOOTH_SETTINGS

ACTION_DATE_SETTINGS

ACTION_LOCALE_SETTINGS

ACTION_INPUT_METHOD_SETTINGS

ACTION_DISPLAY_SETTINGS

ACTION_SECURITY_SETTINGS

ACTION_LOCATION_SOURCE_SETTINGS

ACTION_INTERNAL_STORAGE_SETTINGS

ACTION_MEMORY_CARD_SETTINGS

示例

public void openWifiSettings() {

Intent intent = new Intent(Intent.ACTION_WIFI_SETTINGS);

if (intent.resolveActivity(getPackageManager()) != null) {

startActivity(intent);

}

}

2.3.撰写带附件的短信/彩信

如需发起短信或彩信,则需使用以下其中一个 Intent 操作,并使用下列 extra 键指定电话号码、主题和消息正文等消息详情。

ACTION_SENDTO或

ACTION_SEND或

ACTION_SEND_MULTIPLE

Extra

"subject"表示消息主题的字符串(通常只适用于彩信)。

"sms_body"表示消息正文的字符串。

EXTRA_STREAM指向要附加的图像或视频的Uri,如果使用的是ACTION_SEND_MULTIPLE操作,此 extra 应为指向要附加的图像/视频的Uri ArrayList.

示例

public void composeMmsMessage(String message, Uri attachment) {

Intent intent = new Intent(Intent.ACTION_SENDTO);

intent.setType(HTTP.PLAIN_TEXT_TYPE);

intent.putExtra("sms_body", message);

intent.putExtra(Intent.EXTRA_STREAM, attachment);

if (intent.resolveActivity(getPackageManager()) != null) {

startActivity(intent);

}

}

3.Intent的作用

虽然Intent不是Android四大组件之一,但Intent作为Android的“信使”,在实际开发过程中也非常重要。例如启动Activity,启动Service,发送Broadcast,发送短信,从一个App启动另外一个App,获取系统的联系人,调用系统的地图,调用系统的相机,日历,设置等等。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,要在 Android 发送彩信并监听短信,可以按照以下步骤操作: 1.发送彩信 发送彩信需要使用 MMS(Multimedia Messaging Service)协议,具体步骤如下: ```java // 创建一个 MMS 编辑器 Uri uri = Uri.parse("content://mms"); Intent intent = new Intent(Intent.ACTION_SEND, uri); intent.putExtra("sms_body", "这是彩信的正文"); intent.putExtra("address", "1234567890"); intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("/sdcard/test.jpg"))); intent.setType("image/jpeg"); startActivity(intent); ``` 这个 Intent 会启动系统自带的彩信编辑器,用户可以在编辑器编辑彩信的内容,包括添加图片、声音等元素。用户编辑完毕后,可以选择发送彩信,系统会将彩信发送给指定的号码。 2.监听彩信 要监听彩信,可以注册一个 ContentObserver,监听 MMS 的变化。具体步骤如下: ```java // 创建一个 ContentObserver ContentObserver observer = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); // 处理彩信变化 } }; // 注册 ContentObserver getContentResolver().registerContentObserver(Uri.parse("content://mms"), true, observer); ``` 这样,当有新的彩信到来时,onChange() 方法就会被调用,我们可以在其处理彩信的内容。 3.监听短信 要监听短信,可以注册一个 BroadcastReceiver,监听短信的广播。具体步骤如下: ```java // 创建一个 BroadcastReceiver BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 处理短信 } }; // 注册 BroadcastReceiver IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(receiver, filter); ``` 这样,当有新的短信到来时,onReceive() 方法就会被调用,我们可以在其处理短信的内容。 希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值