多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Android Intent 与常用 Intent Action 完全指南

Android Intent 与常用 Intent Action 完全指南 1. 什么是 Intent在 Android 开发中Intent是一个消息传递对象用于在组件如 Activity、Service、BroadcastReceiver之间请求操作或传递数据。它是 Android 应用组件间通信的核心机制主要用于以下场景启动 Activity从一个 Activity 跳转到另一个 Activity启动 Service启动后台服务执行任务传递广播向系统或其他应用发送广播消息调用外部应用调用系统功能或其他应用的功能2. Intent 的两种主要类型2.1 显式 IntentExplicit Intent显式 Intent 明确指定了要启动的组件类名通常用于启动应用内的组件// 启动应用内的另一个 Activity Intent intent new Intent(this, TargetActivity.class); startActivity(intent); // 启动 Service Intent serviceIntent new Intent(this, MyService.class); startService(serviceIntent);2.2 隐式 IntentImplicit Intent隐式 Intent 不指定具体的组件而是声明要执行的操作让系统匹配合适的组件// 打开网页 Intent intent new Intent(Intent.ACTION_VIEW, Uri.parse(https://www.google.com)); startActivity(intent);3. 常用 Intent Action 分类详解3.1 网页与搜索相关ACTION_WEB_SEARCH- 使用默认浏览器进行网页搜索Intent intent new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, 搜索关键词); startActivity(intent);ACTION_VIEW- 查看/打开内容最常用的 Action// 打开网页 Uri uri Uri.parse(http://www.google.com); Intent it new Intent(Intent.ACTION_VIEW, uri); startActivity(it); // 查看地图位置 Uri mapUri Uri.parse(geo:38.899533,-77.036476); Intent mapIntent new Intent(Intent.ACTION_VIEW, mapUri); startActivity(mapIntent);3.2 通讯相关ACTION_DIAL- 打开拨号界面Uri uri Uri.parse(tel:10086); Intent it new Intent(Intent.ACTION_DIAL, uri); startActivity(it);ACTION_CALL- 直接拨打电话需要 CALL_PHONE 权限Uri uri Uri.parse(tel:10086); Intent it new Intent(Intent.ACTION_CALL, uri); startActivity(it);ACTION_SENDTO- 发送短信/彩信// 发送短信 Uri smsUri Uri.parse(smsto:13800138000); Intent smsIntent new Intent(Intent.ACTION_SENDTO, smsUri); smsIntent.putExtra(sms_body, 短信内容); startActivity(smsIntent);3.3 邮件相关ACTION_SEND- 发送邮件支持附件Intent emailIntent new Intent(Intent.ACTION_SEND); emailIntent.setType(message/rfc822); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{recipientexample.com}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, 邮件主题); emailIntent.putExtra(Intent.EXTRA_TEXT, 邮件正文内容); startActivity(Intent.createChooser(emailIntent, 选择邮件客户端));3.4 多媒体相关ACTION_VIEW- 播放多媒体文件// 播放音频文件 Uri audioUri Uri.parse(file:///sdcard/music.mp3); Intent audioIntent new Intent(Intent.ACTION_VIEW); audioIntent.setDataAndType(audioUri, audio/mp3); startActivity(audioIntent); // 播放视频文件 Uri videoUri Uri.parse(file:///sdcard/video.mp4); Intent videoIntent new Intent(Intent.ACTION_VIEW); videoIntent.setDataAndType(videoUri, video/mp4); startActivity(videoIntent);ACTION_IMAGE_CAPTURE- 拍照Intent takePictureIntent new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) ! null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); }ACTION_GET_CONTENT- 从图库选择图片Intent pickPhotoIntent new Intent(Intent.ACTION_GET_CONTENT); pickPhotoIntent.setType(image/*); startActivityForResult(pickPhotoIntent, PICK_IMAGE_REQUEST);3.5 应用管理相关ACTION_DELETE- 卸载应用Uri packageUri Uri.parse(package:com.example.app); Intent uninstallIntent new Intent(Intent.ACTION_DELETE, packageUri); startActivity(uninstallIntent);ACTION_VIEW- 打开应用商店// 查看应用详情 Uri appDetailsUri Uri.parse(market://details?idcom.example.app); Intent marketIntent new Intent(Intent.ACTION_VIEW, appDetailsUri); startActivity(marketIntent); // 搜索应用 Uri searchUri Uri.parse(market://search?qpname:com.example); Intent searchIntent new Intent(Intent.ACTION_VIEW, searchUri); startActivity(searchIntent);3.6 联系人相关ACTION_PICK- 选择联系人Intent pickContactIntent new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);4. Intent 的额外数据ExtrasIntent 可以通过 putExtra() 方法传递额外数据// 传递简单数据 intent.putExtra(key_string, 字符串值); intent.putExtra(key_int, 100); intent.putExtra(key_boolean, true); // 传递复杂数据需要实现 Parcelable 或 Serializable intent.putExtra(user, userObject); // 传递 Uri 数据 intent.putExtra(Intent.EXTRA_STREAM, imageUri);5. Intent Filter 与组件匹配当使用隐式 Intent 时系统通过 Intent Filter 来匹配组件。在 AndroidManifest.xml 中声明activity android:name.ShareActivity intent-filter action android:nameandroid.intent.action.SEND / category android:nameandroid.intent.category.DEFAULT / data android:mimeTypetext/plain / /intent-filter /activity6. 常用 Intent Action 速查表Action 常量用途示例场景Intent.ACTION_VIEW查看/打开内容打开网页、查看图片、播放视频Intent.ACTION_SEND发送内容分享文本、图片、文件Intent.ACTION_DIAL打开拨号界面拨打电话前输入号码Intent.ACTION_CALL直接拨打电话需要 CALL_PHONE 权限Intent.ACTION_SENDTO发送短信/邮件跳转到短信/邮件应用MediaStore.ACTION_IMAGE_CAPTURE拍照调用相机应用拍照Intent.ACTION_GET_CONTENT获取内容从图库选择图片Intent.ACTION_PICK选择项目选择联系人、选择图片Intent.ACTION_WEB_SEARCH网页搜索使用默认浏览器搜索Intent.ACTION_DELETE删除/卸载卸载应用程序7. 最佳实践与注意事项7.1 检查 Intent 是否可处理Intent intent new Intent(Intent.ACTION_VIEW, Uri.parse(http://www.example.com)); if (intent.resolveActivity(getPackageManager()) ! null) { startActivity(intent); } else { // 没有应用可以处理此 Intent Toast.makeText(this, 没有可用的浏览器, Toast.LENGTH_SHORT).show(); }7.2 使用 Intent.createChooser()Intent shareIntent new Intent(Intent.ACTION_SEND); shareIntent.setType(text/plain); shareIntent.putExtra(Intent.EXTRA_TEXT, 分享内容); startActivity(Intent.createChooser(shareIntent, 选择分享方式));7.3 权限管理CALL_PHONE直接拨打电话需要此权限CAMERA拍照需要此权限READ_CONTACTS读取联系人需要此权限在 Android 6.0 上需要运行时权限申请7.4 数据安全避免传递敏感数据到不可信的应用使用适当的 MIME 类型限制数据访问考虑使用 FileProvider 共享文件8. 总结Intent 是 Android 应用组件间通信的桥梁掌握常用的 Intent Action 能够让你的应用更好地与系统和其他应用交互。本文涵盖了最常见的 Intent 使用场景但在实际开发中还需要根据具体需求查阅官方文档了解更多的 Intent Action 和配置选项。记住显式 Intent 用于应用内部组件跳转隐式 Intent 用于调用系统或其他应用功能。合理使用 Intent 可以让你的应用更加开放和强大。
返回列表