category中intent-filter介绍
一、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent
1、显式启动
显式启动是我们日常开发中必不可少,基本上每天都会写的
Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);
2、隐式启动
与显式启动不同之处在于使用隐式启动需要在我们AndroidManifest.xml清单配置文件中的所需启动的Activity中添加过滤器如下:
<activity android:name=".OtherActivity"><intent-filter><action android:name="com.ghost.deng.OTHER"><category android:name = "android.intent.catrgory.DERAULT"></intent-filter></activity>
然后在我们的Activity中进行隐式启动
Intent intent = new Intent("com.ghost.deng.OTHER");startActivity(intent);
使用隐式启动我们不仅可以启动自己的Activity,还可以启动其他的Activtiy,例如打电话也是通过隐式启动来实现的
Intent intent = new Intent(Intent.ACTION_CALL);Uri data = Uri.parse("tel:"+phoneNum);intent.setData(data);startActivity(intent);
同理我们可以想像,别人如果知道我们的这个action是不是就可以跳转到我们对应的Activity了呢?
答案是肯定的,那么如果我们的意图即action里的这个name与其他应用程序里面的Activity相同时会怎么样呢?
系统会让你选择打开其中一个,如果一个都没有的话,系统就会报错.
二、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data
理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。
例外情况是:
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xm那么必须加上android.intent.category.DEFAULT,否则不起作用。除此之外,category的用途还有很多,
比如做个桌面,按home键时启动自己做的应用
<activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER"/><category android:name="android.intent.category.HOME" /></intent-filter>
</activity>
在intent中是如何配置那三个匹配数据的呢,也就是说,在不直接指定要跳转的Activity的时候,为Intent提供一些相关的参数,让其自动去和AndroidManifest.xml中已有的Activity去匹配
IntentFilter在xml中的三個主要的参数:action,categary,data。
我们通过Intent的构造函数或者Intent提供的方法可以指定这个三个参数:
intent.setAction(action);
intent.setData(data);
intent.addCategory(category);
三、android.intent.action.MAIN和android.intent.category.LAUNCHER关系
一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需要显示在程序列表里,有些不需要。怎么定义呢?android.intent.action.MAIN决定应用程序最先启动的Activity ,android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里,Main和LAUNCHER同时设定才有意义。如果有多个同级的Activity都有过滤器
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
则只有最前面的Activity的 <action android:name="android.intent.action.MAIN" /> 有效,启动该程序时,执行的是该Activity。且在程序列表中有多个图标,这些Activity都在程序列表中显示,该Application有多个入口,执行不同的Activity,但是整个程序的主入口(整个程序最先运行的那个activity)只有最先定义的那个Activity。
如 果一个应用没有LAUNCHER则该apk仍能安装到设备上,但是在主程序图中看不到。如果给那个Activity 设定了LAUNCHER,且同时设定了Main,则这个Activity就可出现在程序图中;如果没有Main,则不知启动哪个Activity,故也不会有图标出现。
category中intent-filter介绍相关推荐
- vue 中的el表达式_Vue中vue.filter()的使用方法介绍(过滤)
本篇文章给大家带来的内容是关于Vue中vue.filter()的使用方法介绍(过滤),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Vue过滤器 {{msg |msgFormat}} ...
- iOS运行时-使用Runtime向Category中添加属性以及运行时介绍
前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...
- Android中Intent介绍
Android中Intent主要分为显式Intent和隐式Intent,今天会主要讲隐式Intent 一.显式Intent 最常用的就是下面这种形式 Intent intent = new Inten ...
- intent Filter
intent Filter 一.介绍 如果一个 Intent 请求在一片数据上执行一个动作, Android 如何知道哪个应用程序(和组件)能用来响应这个请求呢? Intent Filter就是 用来 ...
- 3.1 Android组件intent filter
3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
这篇文章转自博客园 Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putPa ...
- Android中Intent和Intent过滤器详解
众所周知,Android开发中,Intent是个比较常见的应用组件,今天,我就参考Google官方文档书写一次详细的从头到尾的博文. *Intent是一个消息传递对象,可以使用它从其他应用组件请求操作 ...
- Intent Flag介绍 intent.addFlags()
FLAG_ACTIVITY_CLEAR_TOP 如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有A ...
- js中数组filter过滤奇偶数_js--数组的filter()过滤方法的使用
前言 你还在通过for循环遍历数组吗?你还在遍历之后一项一项的通过if判断过滤你需要的数据吗?你还在写着一大堆代码实现一个简单的过滤数据功能吗?那么,今天他来了.他就是这里要介绍的es6中数组filt ...
最新文章
- sskeychain使用(轻量级框架)
- ICinsights:中国芯片难达成既定的2025目标
- java 之 模板模式(大话设计模式)
- 《R语言实战》第3章
- 多智能系统的第一个小视频
- Shell脚本批量清除Nginx缓存
- python适合自学编程吗-没编程基础可以学python吗
- CICD详解(二)——Jenkins持续集成原理
- 智慧校园大数据平台建设和运营整体解决方案
- win10在哪打开ie浏览器?windows11怎么打开ie浏览器?
- js重力感应小球游戏
- 【历史上的今天】9 月 2 日:互联网的“诞生日”;三星逐步跌落神坛;世界上第一个 ATM 自动取款机
- java lambda表达式 list转string
- GMO宣布聘用高级管理人员Amy Shang来领导公司在大中华区的工作
- 应急响应常用命令(Linux)---读书笔记
- ASP.NET+SQL网上校友录设计与实现
- 肺结节圆形边界光滑_发现了肺结节如何判断良恶性?
- 移动应用开发测试工具Bugtags集成和使用教程
- 基于安卓/android/微信小程序的高校党员掌上党支部APP#计算机毕业设计
- Android获取电池电量信息的几种方式
热门文章
- jquery easyui Tree API
- Python图像识别实战(四):搭建卷积神经网络进行图像二分类(附源码和实现效果)
- 浅析云计算数据中心动力环境监控系统-Susie 周
- 防止电脑锁屏脚本power shell版
- python材料计算程序_把python当日常的”计算器”用
- 深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
- spring框架:简述AOP的使用(xml方式和注解方式)
- mysql数据库查询 g_数据库MySQL补充( 查询)
- 6S管理在制药生产车间应用的必要性及实施办法
- 极速60秒!用10条命令检查Linux服务器性能