当前位置:

首页 > 系统应用 > 4.5.1 Intent的基本使用

4.5.1 Intent的基本使用

本文目录

    本节引言: 到上一节为止,Android 四大组件已经全部过完了。接下来要进入的这一节,讲的是把这些组件真正串起来的“中枢”——Intent(意图)。说白了,它就是 Android 里非常关键的一座通信桥梁,比如可以通过: startActivity(Intent)/startActivityFor

    本节引言:

    到上一节为止,Android 四大组件已经全部过完了。接下来要进入的这一节,讲的是把这些组件真正串起来的“中枢”——Intent(意图)。说白了,它就是 Android 里非常关键的一座通信桥梁,比如可以通过:

    • startActivity(Intent)/startActivityForResult(Intent):来启动一个Activity
    • startService(Intent)/bindService(Intent):来启动一个Service
    • sendBroadcast:发送广播到指定BroadcastReceiver
    • 另外别忘了我们在注册四大组件时,写得很多的Intent-Filter哦~

    好吧,话不多说,开始本节内容!另外前面我们已经用过Intent了,就不在讲述概念性的东西了~ 老规矩,官方API:Intent

    1.显式Intent与隐式Intent的区别

    • 显式Intent:通过组件名指定启动的目标组件,比如startActivity(new Intent(A.this,B.class)); 每次启动的组件只有一个~
    • 隐式Intent:不指定组件名,而指定Intent的Action,Data,或Category,当我们启动组件时, 会去匹配AndroidManifest.xml相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时, 会弹出一个让我们选择启动哪个的对话框~

    2.Intent的七个属性:

    1)ComponentName(组件名称)

    2)Action(动作)

    3)Category(类别)

    4)Data(数据),Type(MIME类型)

    5)Extras(额外)

    6)Flags(标记)

    3.显式Intent使用示例:

    这个用得很多,直接就上例子了:

    例子1:点击按钮返回Home界面: 运行效果图:

    核心代码:

    Intent it = new Intent();
    it.setAction(Intent.ACTION_MAIN);
    it.addCategory(Intent.CATEGORY_HOME);
    startActivity(it);

    例子2:点击按钮打开百度页面: 运行效果图:

    核心代码:

    Intent it = new Intent();
    it.setAction(Intent.ACTION_VIEW);
    it.setData(Uri.parse("http://www.baidu.com"));
    startActivity(it);

    4.隐式Intent详解

    1)预定义动作的隐式Intent示例:

    代码示例:点击按钮后,所有Action为VIEW的Activity被筛选出来,由用户进一步选择:

    核心代码:

    建立第二个Activity的布局,与对应的Activity,在第一个Activity的按钮点击事件中添加一下代码:

    Intent it = new Intent();
    it.setAction(Intent.ACTION_VIEW);
    startActivity(it);

    最后在第二个Activity的Intent中添加以下代码:

    
        
            
            
                   
     
     

    运行效果图:

    2)自定义动作的隐式Intent示例:

    代码示例:使用自定义的Action与category来激活另一个Activity

    核心代码: 建立第二个Activity的布局,与对应的Activity,在第一个Activity的按钮点击事件中添加一下代码:

    Intent it = new Intent();
    it.setAction("my_action");
    it.addCategory("my_category");
    startActivity(it);    

    最后在第二个Activity的Intent中添加以下代码:

    
        
            
            
            
                   
    

    注意虽然我们自定义了一个category,但是还是要把这个默认的加上,不然会报错的:

    5.常用系统Intent合集

    大家贴下常用的系统Intent的合集吧,上面没有的欢迎提出~

    //===============================================================
    //1.拨打电话
    // 给移动客服10086拨打电话
    Uri uri = Uri.parse("tel:10086");
    Intent intent = new Intent(Intent.ACTION_DIAL, uri);
    startActivity(intent);
    //===============================================================
    //2.发送信息
    // 给10086发送内容为“Hello”的信息
    Uri uri = Uri.parse("smsto:10086");
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
    intent.putExtra("sms_body", "Hello");
    startActivity(intent);
    //3.发送彩信(相当于发送带附件的信息)
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra("sms_body", "Hello");
    Uri uri = Uri.parse("content://media/external/images/media/23");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    intent.setType("image/png");
    startActivity(intent);
    //===============================================================
    //4.打开浏览器:
    // 打开百度主页
    Uri uri = Uri.parse("http://www.baidu.com");
    Intent intent  = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //===============================================================
    //5.发送电子邮件:(阉割了Google服务的没戏!!!!)
    // 给someone@domain.com发邮件
    Uri uri = Uri.parse("mailto:someone@domain.com");
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
    startActivity(intent);
    // 给someone@domain.com发邮件发送内容为“Hello”的邮件
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_EMAIL, "someone@domain.com");
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Hello");
    intent.setType("text/plain");
    startActivity(intent);
    // 给多人发邮件
    Intent intent=new Intent(Intent.ACTION_SEND);
    String[] tos = {"1@abc.com", "2@abc.com"}; // 收件人
    String[] ccs = {"3@abc.com", "4@abc.com"}; // 抄送
    String[] bccs = {"5@abc.com", "6@abc.com"}; // 密送
    intent.putExtra(Intent.EXTRA_EMAIL, tos);
    intent.putExtra(Intent.EXTRA_CC, ccs);
    intent.putExtra(Intent.EXTRA_BCC, bccs);
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Hello");
    intent.setType("message/rfc822");
    startActivity(intent);
    //===============================================================
    //6.显示地图:
    // 打开Google地图中国北京位置(北纬39.9,东经116.3)
    Uri uri = Uri.parse("geo:39.9,116.3");
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //===============================================================
    //7.路径规划
    // 路径规划:从北京某地(北纬39.9,东经116.3)到上海某地(北纬31.2,东经121.4)
    Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=39.9 116.3&daddr=31.2 121.4");
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //===============================================================
    //8.多媒体播放:
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.parse("file:///sdcard/foo.mp3");
    intent.setDataAndType(uri, "audio/mp3");
    startActivity(intent);
    //获取SD卡下所有音频文件,然后播放第一首=-= 
    Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //===============================================================
    //9.打开摄像头拍照:
    // 打开拍照程序
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, 0);
    // 取出照片数据
    Bundle extras = intent.getExtras(); 
    Bitmap bitmap = (Bitmap) extras.get("data");
    //另一种:
    //调用系统相机应用程序,并存储拍下来的照片
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    time = Calendar.getInstance().getTimeInMillis();
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
    .getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg")));
    startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE);
    //===============================================================
    //10.获取并剪切图片
    // 获取并剪切图片
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    intent.putExtra("crop", "true"); // 开启剪切
    intent.putExtra("aspectX", 1); // 剪切的宽高比为1:2
    intent.putExtra("aspectY", 2);
    intent.putExtra("outputX", 20); // 保存图片的宽和高
    intent.putExtra("outputY", 40); 
    intent.putExtra("output", Uri.fromFile(new File("/mnt/sdcard/temp"))); // 保存路径
    intent.putExtra("outputFormat", "JPEG");// 返回格式
    startActivityForResult(intent, 0);
    // 剪切特定图片
    Intent intent = new Intent("com.android.camera.action.CROP"); 
    intent.setClassName("com.android.camera", "com.android.camera.CropImage"); 
    intent.setData(Uri.fromFile(new File("/mnt/sdcard/temp"))); 
    intent.putExtra("outputX", 1); // 剪切的宽高比为1:2
    intent.putExtra("outputY", 2);
    intent.putExtra("aspectX", 20); // 保存图片的宽和高
    intent.putExtra("aspectY", 40);
    intent.putExtra("scale", true);
    intent.putExtra("noFaceDetection", true); 
    intent.putExtra("output", Uri.parse("file:///mnt/sdcard/temp")); 
    startActivityForResult(intent, 0);
    //===============================================================
    //11.打开Google Market 
    // 打开Google Market直接进入该程序的详细页面
    Uri uri = Uri.parse("market://details?id=" + "com.demo.app");
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    //===============================================================
    //12.进入手机设置界面:
    // 进入无线网络设置界面(其它可以举一反三)  
    Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);  
    startActivityForResult(intent, 0);
    //===============================================================
    //13.安装apk:
    Uri installUri = Uri.fromParts("package", "xxx", null);   
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
    //===============================================================
    //14.卸载apk:
    Uri uri = Uri.fromParts("package", strPackageName, null);      
    Intent it = new Intent(Intent.ACTION_DELETE, uri);      
    startActivity(it); 
    //===============================================================
    //15.发送附件:
    Intent it = new Intent(Intent.ACTION_SEND);      
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");      
    it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");      
    sendIntent.setType("audio/mp3");      
    startActivity(Intent.createChooser(it, "Choose Email Client"));
    //===============================================================
    //16.进入联系人页面:
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(People.CONTENT_URI);
    startActivity(intent);
    //===============================================================
    //17.查看指定联系人:
    Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id联系人ID
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(personUri);
    startActivity(intent);
    //===============================================================
    //18.调用系统编辑添加联系人(高版本SDK有效):
    Intent it = newIntent(Intent.ACTION_INSERT_OR_EDIT);    
    it.setType("vnd.android.cursor.item/contact");    
    //it.setType(Contacts.CONTENT_ITEM_TYPE);    
    it.putExtra("name","myName");    
    it.putExtra(android.provider.Contacts.Intents.Insert.COMPANY, "organization");    
    it.putExtra(android.provider.Contacts.Intents.Insert.EMAIL,"email");    
    it.putExtra(android.provider.Contacts.Intents.Insert.PHONE,"homePhone");    
    it.putExtra(android.provider.Contacts.Intents.Insert.SECONDARY_PHONE,"mobilePhone");    
    it.putExtra( android.provider.Contacts.Intents.Insert.TERTIARY_PHONE,"workPhone");    
    it.putExtra(android.provider.Contacts.Intents.Insert.JOB_TITLE,"title");    
    startActivity(it);
    //===============================================================
    //19.调用系统编辑添加联系人(全有效):
    Intent intent = newIntent(Intent.ACTION_INSERT_OR_EDIT);    
    intent.setType(People.CONTENT_ITEM_TYPE);    
    intent.putExtra(Contacts.Intents.Insert.NAME, "My Name");    
    intent.putExtra(Contacts.Intents.Insert.PHONE, "+1234567890");    
    intent.putExtra(Contacts.Intents.Insert.PHONE_TYPE,Contacts.PhonesColumns.TYPE_MOBILE);    
    intent.putExtra(Contacts.Intents.Insert.EMAIL, "com@com.com");    
    intent.putExtra(Contacts.Intents.Insert.EMAIL_TYPE, Contacts.ContactMethodsColumns.TYPE_WORK);    
    startActivity(intent);
    //===============================================================
    //20.打开另一程序 
    Intent i = new Intent();     
    ComponentName cn = new ComponentName("com.example.jay.test",     
    "com.example.jay.test.MainActivity");     
    i.setComponent(cn);     
    i.setAction("android.intent.action.MAIN");     
    startActivityForResult(i, RESULT_OK);
    //===============================================================
    //21.打开录音机
    Intent mi = new Intent(Media.RECORD_SOUND_ACTION);     
    startActivity(mi);
    //===============================================================
    //22.从google搜索内容 
    Intent intent = new Intent();     
    intent.setAction(Intent.ACTION_WEB_SEARCH);     
    intent.putExtra(SearchManager.QUERY,"searchString")     
    startActivity(intent);
    //===============================================================

    6.Action在哪里查?

    原本是想把之前整理好的Intent Action直接贴出来,但转念一想,单纯给结果意义有限,真正有用的还是把方法讲清楚。要是已经下载了Android文档,可以直接去下面这个路径查找:

    sdk-->docs-->reference-->android--->content--->Intent.html

    找到这个玩意,然后从这个Constants开始就是了:

    遇到陌生的自己来这里查即可~

    本节小结:

    好的,关于Intent的基本使用就到这里,下一节我们会来继续学习在日常开发中使用Intent可能会遇到 的一些问题或者说需求吧,敬请期待,谢谢~

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用
    相关文章 更多
    win10系统更新推送频繁怎么减少更新提示
    win10系统更新推送频繁怎么减少更新提示

    Windows 10更新弹窗频繁影响工作?无需禁用服务,只需调整活动时间、安排重启和优化通知设置,即可有效减少干扰并保持系统安全。

    win10怎么查看当前系统自动更新有没有被关闭
    win10怎么查看当前系统自动更新有没有被关闭

    想知道Win10自动更新是否被关闭?不要只看任务栏。本文教你通过“设置-更新和安全”、“高级选项”及“services.msc服务”三处位置,准确判断系统更新状态是暂停、运行还是受组织策略管理。

    win10休眠唤醒和开机登录密码可以分开取消吗?
    win10休眠唤醒和开机登录密码可以分开取消吗?

    想知道Win10能否只取消休眠唤醒密码而保留开机密码?本教程详解如何通过系统设置和netplwiz工具,分别控制开机登录与睡眠唤醒后的验证要求,实现灵活的安全策略。

    win10取消开机密码之后如何恢复密码登录
    win10取消开机密码之后如何恢复密码登录

    Win10取消开机密码后想恢复?本教程详解如何通过netplwiz恢复开机输入框、重新设置空密码账户、配置PIN码及调整睡眠唤醒登录策略,步骤清晰,即改即验。

    win10注册表修改怎么取消开机自动登录密码
    win10注册表修改怎么取消开机自动登录密码

    想恢复Win10开机密码保护?本文详解如何通过注册表修改AutoAdminLogon值取消自动登录,配合netplwiz工具复核,避免凭据泄露风险,适合家用及办公场景参考。

    win10电脑一开机就下载更新怎么关闭
    win10电脑一开机就下载更新怎么关闭

    Win10一开机就占用网速下载更新?本文教你通过设置暂停更新、调整活动时间及标记计费网络来缓解干扰。区分家庭版与专业版操作差异,避免强制停止服务带来的系统风险,让更新在合适的时间进行。

    win10取消开机密码时输入密码验证失败怎么解决
    win10取消开机密码时输入密码验证失败怎么解决

    Win10取消开机密码时提示验证失败?可能是因为输错了Microsoft账户密码或误用了PIN码。本文详解如何确认账户类型、正确输入凭据及检查自动登录设置,帮你解决验证报错问题。

    win10忘记当前密码了怎么处理完整方法
    win10忘记当前密码了怎么处理完整方法

    Windows 10忘记开机密码如何处理?本文根据账户类型(Microsoft账户/本地账户/PIN)提供官方支持的恢复步骤,包括在线重置、安全问题回答及管理员重置方法,避免数据丢失风险。

    win10更新提示不断弹出如何永久关闭通知
    win10更新提示不断弹出如何永久关闭通知

    Windows 10更新提示频繁弹窗怎么办?本文详解如何通过Windows更新高级选项、系统通知设置及暂停更新功能,精准关闭不必要的重启提醒和横幅通知,同时确保系统安全更新不受影响。适用于家庭及个人用户,区分个人设置与企业策略管理。

    win10家庭版能不能取消开机密码,操作步骤是什么
    win10家庭版能不能取消开机密码,操作步骤是什么

    Win10家庭版如何取消开机密码?本文详解本地账户清空密码步骤及Microsoft账户自动登录设置方法,分析安全风险与例外情况,帮助用户在便捷与安全间做出合理选择。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。