❶ datahelper.filter怎么用
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传Intent来执行动作和产生事件。使用Intent可以激活Android应用三种类型的核心组件:活动、服务和广播接收者。
Intent可以划分成显式意图和隐式意图:
显式意图:调用Intent.setComponent()\ Intent.setClassName()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了要激活的组件是哪个组件。
隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。对于隐式意图,Android是怎样寻找到这个最合适的组件呢?我们在定义Activity时,指定了一个intent-filter,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。
动作测试(Action test)
一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:
如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试
类别测试(Category test)
对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。
原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)
数据测试(Data test)
当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。
❷ Android Manifest什么意思
每个安卓应用程序必须有一个AndroidManifest.xml文件(正是这个名字),在其根目录res下。它在简单的Android系统的应用提出了重要的信息,信息系统[1] 必须具备之前,它可以运行任何应用程序的代码。除其他事项外,清单中执行下列操作:
它命名为应用程序的Java包。包的名称作为一个应用程序的唯一标识符。
它描述了应用程序的组件-的活动,服务,广播接收机,内容提供商,应用程序组成。它命名的类,实现每个组件,并出版自己的能力(例如,他们可以处理哪些意图的消息)。这些声明让Android系统知道的组件是什么和在什么条件下,他们可以推出。
它决定哪些进程将主机应用程序组件。
它宣称,应用程序必须有权限才能访问受保护的API部分,并与其他应用程序进行交互。
它还宣布,其他人则需要以与应用程序的组件交互的权限。
它列出了仪器仪表类,提供了分析和其他信息的应用程序正在运行。这些声明是在清单中,只有当应用程序正在开发和测试;申请公布之前,他们正在拆除。
它宣布的Android API的应用程序需要的最低水平。
它列出了库,应用程序必须与配对。
结构编辑
下图显示了manifest文件和每一个元素,它可以包含的一般结构。每个元素,连同其所有属性记录在一个单独的文件。要查看有关的任何元素的详细信息,单击图中的元素的名称,在按字母顺序排列的列表,如下图,或任何其他元素的名称提到的元素。
<?XML版本= “1.0” 编码= “UTF-8” ?>
<manifest>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
<compatible-screens/>
<supports-gl-texture/
的<application><activity><intent-filter>行动< />< 类别><数据/></意图过滤器><元数据/></活动><activity-alias><intent-filter>。。。过滤器><元数据/></活动别名>的<service><intent-filter>。。。过滤器><meta-data/></服务><receiver><intent-filter>。。。过滤器><元数据/></接收器>的<provider><赠款URI权限/>< 元数据></供应商><用途库/></申请></清单>
下面列出的所有元素可以出现在manifest文件中按字母顺序排列。这是唯一合法的元素,你不能添加自己的元素或属性。
<action>
<activity>
<activity-alias>
<application>
<category>
<data>
<grant-uri-permission>
<instrumentation>
<intent-filter>
<manifest>
<meta-data>
<permission>
<permission-group>
<permission-tree>
<provider>
<receiver>
<service>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-library>
<uses-permission>
<uses-sdk>
约定
一些公约和规则普遍适用于清单中的所有元素和属性:
分子
只有 <manifest>和 的<application> 元素是必需的,他们每人必须在场,并只能出现一次。大多数人可以出现多次或根本没有-但至少他们中的一些必须完成任何有意义的清单。如果一个元素包含任何东西,它包含其他元素。通过属性值设置,而不是作为一个元素内的字符数据。
一般不会下令在同一级别的元素。例如, <activity>的<provider>,和 的<service> 元素可以以任何顺序混合。(一个 <activity-alias> 元素是此规则的例外:必须遵循 <activity>, 它是一个别名。)
属性
在正式意义上说,所有的属性都是可选的。不过,也有一些必须指定为元素,以实现其目的。使用的文件,作为指导。对于真正的可选属性,它提到一个默认值或规范的情况下发生的事情。除了 根属性 <manifest> 元素,所有的属性名与Android的开始:前缀-例如,机器人:alwaysRetainTaskState。因为前缀是普遍的,一般的文件时忽略它指属性的名字。
名称
许多元素对应到Java对象,包括应用程序本身的元素( 的<application> 元素),其主要成分-活动(<activity>),服务(的<service>),广播接收机(<receiver>),内容提供商(的<provider>)。如果你定义一个子类,子类,你几乎总是会活动,服务, BroadcastReceiver,和ContentProvider的组件类()被宣布通过名称属性。该名称必须包括完整的包指定。例如,一个服务子类可以声明如下:
<清单。。> <应用程序。。> <服务机器人:名称= “com.example.project.SecretService” 。。。>。。。</服务>。。。</申请> </清单>然而,作为一个缩写,如果字符串的第一个字符是一个句号,该字符串附加到应用程序的包名(由指定<manifest> 元素的 包 属性)。上面是相同的分配如下:
<清单的包= “com.example.project” 。。> <应用程序。。> <服务机器人:名称= “。SecretService” 。。。>。。。</服务>。。。</申请> </清单>Android的组件启动时,创建一个命名的子类的实例。如果没有指定一个子类,它创建一个基类的实例。
多个值
如果可以指定多个值,元素几乎总是重复的,而不是在一个单一的元素列出多个值。例如,一个意图过滤器可以列出几个动作:<意图过滤器。。。。。</意图过滤器>资源值一些属性,可以向用户显示的值 - 例如,一个标签和一个活动的图标。这些属性的值应本地化,因此从资源或主题。资源值表示在下面的格式,[ 包:] 类型:名称
如果资源是在应用程序相同的包, 其中包名称可以省略,类型是一个类型的资源-如“串”或“绘制” - 名称是名称标识的特定资源。例如:
< 活动:图标= “@绘制/ smallPic” 。。。>以类似的方式表达主题值,但与最初的“ ? “ 而不是“ @ “:
[ 包:] 类型:名称
字符串值如果属性值是一个字符串,双反斜杠(' \ \ ')必须使用转义字符-例如,“ \ \ N “一个换行符或” \ \ uxxxx“的Unicode字符。
功能
以下各节描述了一些Android的功能是如何体现在manifest文件中。
意图过滤器
应用程序(它的活动,服务和广 播接收机)的核心部件,被激活的意图。意图是信息(捆绑意向书,描述了一个理想的行动对象) -包括要采取行动时,组件类别的数据,应执行的行动,和其他有关说明。机器人找到一个合适的组件回应的意图,启动一个新的组件实例,如果需要的话,它传递的Intent对象。
组件宣传他们的能力-他们能够应对各种意图的意图过滤器 -通过。由于Android系统必须学习一个组件可以处理其中的意图之前推出的组件,意图过滤器指定在清单 <intent-filter> 元素。一个组件可以有任何数量的过滤器,每一个不同的能力。
意图明确命名一个目标组件将激活该组件;过滤器并没有起到作用。但意图不指定目标的名字,可以激活一个组件,只有当它可以通过组件的过滤器之一。
意向对象是如何对意图过滤器测试的信息,看到一个单独的文件, 意图和意图过滤器。
图标和标签
一些元素可以向用户显示一个小图标和文本标签的图标和标签属性。有些也有 描述较长的说明性文本,也可以在屏幕上显示的属性。例如,在 <permission> 元素具有所有这三个属性,这样当用户询问是否要授予应用程序的权限要求,一个图标代表的权限,权限的名称,描述它需要什么都可以呈现给用户。
在任何情况下,包含元素的图标,并在标签集变成默认的 图标和标签设置为容器的所有子元素。因此,在设置的<application> 元素的图标和标签 是默认的图标,并为每个应用程序的组件标签。同样,图标和标签组件集-为例如, <activity>的 元素-每个组件的默认设置 <intent-filter>的 元素。如果 的<application> 元素设置一个标签,而是一种活动,其意图过滤器没有做,被视为应用程序标签的活动和意图过滤器的标签。
被用来代表一个组件时,该组件实现广告过滤器的功能,向用户意图过滤器设置的图标和标签。例如,一个“过滤器android.intent.action.MAIN “和” android.intent.category.LAUNCHER “设置广告作为一个,启动一个应用程序的活动-即是,作为一个在应用程序启动器应显示。在过滤器中设置的图标和标签,因此在发射器上显示的。
权限
一个权限是一种限制,限制访问代码的一部分,或在设备上的数据。施加的限制,以保护关键数据和代码可能被滥用,扭曲或损害了用户体验。
每个权限确定一个唯一的标签。标签往往表示,这是限制的行动。例如,这里是由Android定义了一些权限:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
一个功能可以保护最多一个权限。
如果应用程序需要访问权限保护功能,它必须声明,它需要 在清单与权限 <uses-permission>的元素。然后,在设备上安装应用程序时,安装程序决定是否批准或者不批准通过检查当局签署的应用程序的证书,并在某些情况下,要求用户请求的权限。如果被授予的权限,应用程序能够使用的保护功能。如果没有,只会失败,没有任何通知用户试图访问这些功能。
应用程序还可以保护自己的组件(活动,服务,广播接收机,内容提供商)与权限。它可以采用任何定义的Android(在列出的权限 android.Manifest.permission)或其他应用程序申报。或者也可以定义自己的。一个新的权限宣布与 <permission> 元素。例如,一个活动可以保护如下:
<清单。。>:许可机器人:名称= “com.example.project.DEBIT_ACCT 。。/> <用途许可机器人:名称= “com.example.project.DEBIT_ACCT” />。。。<应用程序。。。。>。。。</活动> </申请> </清单>请注意,在这个例子中,DEBIT_ACCT许可不仅宣布 <permission> 元素,它的使用也要求与 <uses-permission> 元素。为了应用程序的启动保护活动的其他组成部分,必须要求其使用,即使是由应用程序本身施加保护。
同样的例子,如果在宣布在别处(例如作为android.permission.CALL_EMERGENCY_NUMBERS权限,权限属性设置,它不会有必要宣布它再次 <permission> 元素,但它仍然会一直有必要要求其与使用 <uses-permission>。
<permission-tree> 元素声明为一组,将在代码中定义的权限的命名空间。和 <permission-group> 定义为一组的权限(包括那些与舱单申报的标签 <permission> 元素和那些宣布在别处)。它的影响只有权限如何分组时,呈现给用户。 <permission-group> 元素没有指定属于该组的权限;它只是给该组的名称。权限被放置在该组分配的<permission> 元件的 permissionGroup, 属性组的名称 。
库
每一个应用程序连接到默认的Android库,其中包括建筑应用(如活动,服务,意图,查看“按钮,应用,ContentProvider的,等通用类)的基本包。
然而,一些软件包驻留在自己的图书馆。如果您的应用程序使用这些包有任何的代码,它必须明确要求对他们联系。舱单必须包含单独 <uses-library> 元素,每个命名的图书馆。(库的名称,可以发现在文件包)。
MANIFEST 系统文件
C:\WINDOWS\WinSxS\Manifests\下有许多XML格式的manifest文件,这些是服务端的程序清单。WinSxs是windows XP以上版本提供的非托管并行缓存,里面安装了各种版本的经过强文件名签名的系统库,这些文件正是标注了系统中的强文件名签名,如果与manifest 清单里面所列出的依赖项对上的话,就会被加载。
C:\WINDOWS\WinSxS\Manifests\是一个重要的系统文件夹,不能删除!
❸ lay-filter是怎么用的
Android基本的设计理念是鼓励减少组件间的耦合,因此提供了Intent(意图),Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传Intent来执行动作和产生事件。使用Intent可以激活Android应用三种类型的核心组件:活动、服务和广播接收者。Intent可以划分成显式意图和隐式意图:显式意图:调用Intent.setComponent()\Intent.setClassName()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了要激活的组件是哪个组件。隐式意图:没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。对于隐式意图,Android是怎样寻找到这个最合适的组件呢?我们在定义Activity时,指定了一个intent-filter,IntentFilter(意图过滤器)其实就是用来匹配隐式Intent的,当一个意图对象被一个意图过滤器进行匹配测试时,只有三个方面会被参考到:动作、数据(URI以及数据类型)和类别。动作测试(Actiontest)一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。另一方面,只要过滤器包含至少一个动作,一个没有指定动作的意图对象自动通过这个测试类别测试(Categorytest)对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举另外的类别,但它不能遗漏在这个意图中的任何类别。原则上一个没有类别的意图对象应该总能够通过匹配测试,而不管过滤器里有什么。大部分情况下这个是对的。但有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT"(CATEGORY_DEFAULT常量)。因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。(带"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"设置的过滤器是例外)数据测试(Datatest)当一个意图对象中的URI被用来和一个过滤器中的URI比较时,比较的是URI的各个组成部分。例如,如果过滤器仅指定了一个scheme,所有该scheme的URIs都能够和这个过滤器相匹配;如果过滤器指定了一个scheme、主机名但没有路经部分,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,而不管它们的路经;如果过滤器指定了一个scheme、主机名和路经,只有具有相同scheme、主机名和路经的URIs才可以和这个过滤器相匹配。当然,一个过滤器中的路径规格可以包含通配符,这样只需要部分匹配即可。数据测试同时比较意图对象和过滤器中指定的URI和数据类型。规则如下:a.一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试。b.一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试。这通常发生在类似于mailto:和tel:这样的URIs上:它们并不引用实际数据。c.一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试。d.一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试,如果它的类型和过滤器中列举的类型相匹配的话。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content:或者文件file:URI而且这个过滤器没有指定一个URI,那么它也能通过测试。换句话说,一个组件被假定为支持content:和file:数据如果它的过滤器仅列举了一个数据类型。
❹ 如何设置文件使用意图的相机ACTION
隐式意图,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android。换句话说:没有明确指定组件名的Intent为隐式意图。当然;android,显式意图明确指定了要激活的组件是哪个组件.intent。这个过滤器可以列举另外的类别:和tel。如果它的URI和这个过滤器中的一个URI相匹配或者它有一个内容content、主机名和路经.intent。(带"、数据(URI以及数据类型)和类别、类别(category):这样的URIs上:调用Intent,而不管它们的路经,所有具有相同scheme和主机名的URIs都可以和这个过滤器相匹配,指定了一个intent-filter。大部分情况下这个是对的。
数据测试同时比较意图对象和过滤器中指定的URI和数据类型。这通常发生在类似于mailto。
另一方面?我们在定义Activity时; (CATEGORY_DEFAULT常量).DEFAULT":
a:活动。如果意图对象或过滤器没有指定任何动作,如果过滤器仅指定了一个scheme,一个过滤器中的路径规格可以包含通配符,因此所有的意图都会测试失败;android.intent;,但它不能遗漏在这个意图中的任何类别。规则如下;设置的过滤器是例外)
数据测试(Data test)
当一个意图对象中的URI被用来和一个过滤器中的URI比较时,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别、数据(URI和数据类型)找到最合适的组件来处理这个意图,结果将如下,如果它的类型和过滤器中列举的类型相匹配的话.category:它们并不引用实际数据.MAIN". 一个既不包含URI也不包含数据类型的意图对象仅在过滤器也同样没有指定任何URIs和数据类型的情况下才能通过测试、服务和广播接收者。
Intent可以划分成显式意图和隐式意图,一个没有指定动作的意图对象自动通过这个测试
类别测试(Category test)
对于一个能够通过类别匹配测试的意图,所有该scheme的URIs都能够和这个过滤器相匹配,这样只需要部分匹配即可. 一个包含URI但没有数据类型的意图对象仅在它的URI和一个同样没有指定数据类型的过滤器里的URI匹配时才能通过测试,只有三个方面会被参考到。对于隐式意图。
动作测试(Action test)
一个意图对象只能指定一个动作名称,因此Android提供了Intent (意图) ,那么它也能通过测试;如果过滤器指定了一个scheme.category.setComponent()\,那么将阻塞所有的意图,Android是怎样寻找到这个最合适的组件呢:"。
d、主机名但没有路经部分。
原则上一个没有类别的意图对象应该总能够通过匹配测试,它允许在你的应用程序与其它的应用程序间传Intent来执行动作和产生事件.setClassName()或Intent,意图对象中的类别必须匹配过滤器中的类别。例如,当一个意图对象被一个意图过滤器进行匹配测试时. 一个包含数据类型但不包含URI的意图对象仅在这个过滤器列举了同样的数据类型而且也没有指定一个URI的情况下才能通过测试:
如果过滤器没有指定任何动作。但有一个例外。
c,比较的是URI的各个组成部分.action.setClass()方法明确指定了组件名的Intent为显式意图,只要过滤器包含至少一个动作.LAUNCHER".DEFAULT",Intent提供了一种通用的消息系统。 因此,Intent Filter(意图过滤器)其实就是用来匹配隐式Intent的.category。
b: URI而且这个过滤器没有指定一个URI:动作。没有意图能够通过这个过滤器,只有具有相同scheme:或者文件file,而一个过滤器可能列举多个动作名称,而不管过滤器里有什么; Intent。使用Intent可以激活Android应用三种类型的核心组件;和".intent、主机名和路经的URIs才可以和这个过滤器相匹配。 Android系统会根据隐式意图中设置的动作(action),一个组件被假定为支持content;如果过滤器指定了一个scheme: 数据如果它的过滤器仅列举了一个数据类型Android基本的设计理念是鼓励减少组件间的耦合:
显式意图;android. 一个同时包含URI和数据类型(或者可从URI推断出数据类型)的意图对象可以通过测试:和file