前言

Intent主要用于应用程序内部的Activity, ServiceBroadcastReceiver之间的交互。

1. Intent的属性

  • action属性,用来表现意图的行动
    一个Intent Filter可以包含多个action,表示该activity能接受的动作。启动Activityaction值为 "android.intent.action.MAIN"
  • category属性,用来表现动作的类别
    一个Intent Filter可以包含多个category,如果没有指定category,必须使用默认的 "android.intent.category.DEFAULT"。启动Activitycategory值为 "android.intent.category.LAUNCHER"
  • data属性,是个Uri对象,用来表示动作要操纵的数据
    系统内置的几个Data属性常量:

    • tel,号码数据格式,后跟电话号码。
    • mailto,邮件数据格式,后跟邮件收件人地址。
    • smsto,短息数据格式,后跟短信接收号码。
    • content,内容数据格式,后跟需要读取的内容。
    • file,文件数据格式,后跟文件路径。
  • type属性,用来对于data范例的描写。
    type属性时mime类型,常见type类型有:

    • text/html,网页
    • text/plain,普通文本
    • image/*,图片文件
    • video/*,视频文件
    • audio/*,音频文件
    • application/vnd.android.package-archive,安卓Apk

2. Intent调用

AndroidManifest.xml文件中定义一个新的Activity,自定义action"com.blog.demo.action.intent"。必须指定category,如果没有使用默认category

<activityandroid:name=".component.intent.IntentSampleActivity"><intent-filter><action android:name="com.blog.demo.action.intent" /><action android:name="com.blog.demo.action.sample" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</activity>

显式Intent调用直接指定组件。

startActivity(new Intent(this, IntentSampleActivity.class));

隐式Intent调用会在配置文件中查找匹配的组件。ActivityCategory中包含一个默认的Category"android.intent.category.DEFAULT"

startActivity(new Intent("com.blog.demo.action.intent"));

如果隐式Intent调用 "com.blog.demo.action.sample",匹配到多个组件,会弹出一个选择弹窗。

<activity android:name=".component.intent.IntentCategoryActivity"><intent-filter><action android:name="com.blog.demo.action.sample" /><category android:name="android.intent.category.DEFAULT" /><category android:name="com.blog.demo.MY_CATREORY" /></intent-filter>
</activity>

可调用Intent.createChooser(Intent, CharSequence)方法打开多个组件进行选择。

Intent targetIntent = new Intent("com.blog.demo.action.sample");
Intent intent = Intent.createChooser(targetIntent, "选择");
startActivity(intent);

可以指定多个category来匹配,

Intent intent = new Intent("com.blog.demo.action.sample");
intent.addCategory("com.blog.demo.MY_CATREORY");
startActivity(intent);

3. Intent值传递

调用Intent.putExtra()方法传递值,调用getIntent().getXXXExtra()方法获取。

4. 启动Activity的方式

启动方式,一种是直接使用startActivity(),另外一种就是使用startActivityForResult()

startActivityForResult()的主要作用就是可以回传数据。requestCode是一个常量,用于区分回调的来源。

startActivityForResult(Intent intent, int requestCode)

onActivityResult()的主要作用就是来处理回调数据,其中requestCode是请求时的参数,resultCodedata是新Activity中返回的值。

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

在新Activity中使用setResult()来返回数据,如果没有调用setResult方法,resultCode返回RESULT_CANCELEDdata为空。

setResult(int resultCode)
setResult(int resultCode, Intent data)

5. 常用Intent

返回Home界面

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

进入拨号界面,显示号码10086

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

拨打电话,需要添加权限"android.permission.CALL_PHONE"

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

打开网页

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

拍照

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_PHOTO);// onActivityResult中调用
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");

获取图片

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_PICTURE);// onActivityResult中调用
Uri uri = data.getData();
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));

安装apk

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.fromFile(new File("xxx.apk"));
intent.setDataAndType(data, "application/vnd.android.package-archive");
startActivity(intent);

源码下载: https://github.com/nai-chen/AndroidBlog

Android Intent应用相关推荐

  1. Android Intent setAction的使用注意

    Action 的作用: 设置要执行的常规操作,一般在界面的隐式跳转(跳转到拨打电话界面等操作),服务,广播, Action用在隐式跳转使用 java 代码 Intent intent = new In ...

  2. Android Intent的几种用法全面总结

    Android Intent的几种用法全面总结 Intent, 用法 Intent应该算是Android中特有的东西.你可以在Intent中指定程序要执行的动作(比如:view,edit,dial), ...

  3. android之android.intent.category.DEFAULT的用途和使用

    1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity , ...

  4. Android -- Intent

    Intent                                                                                       Android ...

  5. (转)理解android.intent.action.MAIN 与 android.intent.category.LAUNCHER

    其中Android.intent.action.MAIN 与 android.intent.category.LAUNCHER 决定应用程序在luncher中的显示方式: 两者的作用如下: andro ...

  6. 监听屏幕 android.intent.action.USER_PRESENT

    在做解锁监听程序时,一开始采用监听屏幕SCREEN_ON和SCREEN_OFF这两个action. 但奇怪的是,这两个action只能通过代码动态的形式注册,才能被监听到,使用AndroidManif ...

  7. Android Intent 大全[转载]

    Android Intent 大全     android 中intent是经常要用到的.不管是页面牵转,还是传递数据,或是调用外部程序,系统功能都要用到intent.         ★intent ...

  8. 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Android 应用安装后 , 出现两个相同的启动图标 , 其中一个可以启动 , 另外一个启动后 , 直接崩溃 ; 卸载其中一个 , 会将整个应用卸 ...

  9. Android——Intent动作汇总(转)

    String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式.. "android.intent.action.ADD_SHORTCUT"  String ...

  10. Android --- android.intent.action.MAIN 与 android.intent.category.LAUNCHER常用的几种情况

    第一种情况: 有MAIN,无LAUNCHER,程序列表中无图标 原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 第二种情况: 无MAIN,有LA ...

最新文章

  1. 哈夫曼树的java实现_java实现哈夫曼树
  2. uni-app在iOS移动端页面上下滑动关闭(页面回弹问题,非刷新)
  3. body区域怎么传一个数组_用户输入的虎狼之词,怎么校验之后不见了?
  4. 【动态规划笔记】状压dp:蓝桥 矩阵计数 (二进制枚举)
  5. LinkedHashMap 底层分析
  6. 算法:动态规划解决爬楼梯Climbing Stairs python3
  7. ORACLE在线切换undo表空间
  8. 计算机5800计算道路标高程序,强大的高速公路坐标高程计算软件
  9. Python图像处理丨认识图像锐化和边缘提取的4个算子
  10. 解决百度云管家导入未完成下载任务
  11. python图像算法,Zhang-Suen 图像细化算法python实现
  12. 大公司进不去,待在小公司,有前途吗?
  13. bzoj 2330 / AcWing 368 银河 差分约束系统+tarjan缩点+拓扑排序
  14. 集合论基本概念与其运算
  15. 将eclipse的背景色设置成眼睛保护色,保护眼睛从身边的小事做起。
  16. 防止网站被WEBZIP等整体下载
  17. 枪杀5人 美国路易斯安那州枪击案嫌犯在弗州被捕
  18. VUE3 图片懒加载实现
  19. 零成本修复XBox手柄摇杆漂移
  20. 上海高中计算机学校门槛,“魔都”上海最难进的5所中学,入学门槛高,能进的人都不一般...

热门文章

  1. 米家扫地机器人静音模式在哪_MIJIA 米家 扫地机器人 开箱及简单评测
  2. java socket 全双工客户端_JavaSocket全双工通信 问题 待解决
  3. start service失败的问题解决
  4. 计算机维修志愿活动策划书,去敬老院志愿者活动策划书5
  5. android zip解压简书,iOS解压ZIP压缩包
  6. 中国金属采矿行业前景调研及发展战略深度研究报告2022-2028年
  7. can上位机开发资料
  8. 【个人学习记录】从0开始学习前端开发
  9. 03-面向对象之面向对象基础
  10. IFS系统功能清单之二——IFS财务