You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gitProject1/doc/向金成——精读代码/AndroidManifest.xml

353 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?xml version="1.0" encoding="utf-8"?>
<!--
version 表示应该用什么版本号的解析器去解析该XML文件
encoding 表示应该用什么样的编码去翻译
-->
<!-- Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- 1、xmlns为命名空间属性android 为命名空间名字http://schemas.android.com/apk/res/android URI标识命名空间资源在互联网上位置
2、XML中有元素便签和属性2个概念元素的形式为<元素名 属性名="属性的值“> </元素名>
3、<manifest> </manifest>为根元素(便签) 即第一个出现的元素,是后面元素的根
4、<uses-sdk android:minSdkVersion="14"/> 为空便签,与属性配合 空便签形式为<元素名/>
5、元素可以进行嵌套
6、每个AndroidManifestxml文件中必须包含其只能包含一个manifest元素
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.micode.notes"
android:versionCode="1"
android:versionName="0.1" >
<!--
1、package的属性值是java目录下的软件包的包名也是默认的进程名同时也是命名空间名且值在后面组件中会替换以.开头的声明,
如android:name=".ui.NotesListActivity" 会解析成android:name="net.micode.notes.ui.NotesListActivity"
2、versionCode为命名空间android的属性表示应用版本号是用于更新的应为1、2、3这样的形式
3、versionName也为命名空间android的属性是给用户看的当前版本号可以为1.11.21.2.1 这样的形式
-->
<uses-sdk android:minSdkVersion="14" />
<!--
配置SDK版本的在此标签下可以给android:minSdkVersion android:maxSdkVersionandroid:targetSdkVersion 这3种属性
进行设置属性值为API版本与android的版本有对应关系minSdkVersion的值指定了能使用该软件的最小API也间接指定了最小的安卓版本
maxSdkVersion的值指定了最大的安卓版本当前安卓版本高于设置的则不能使用用于targetSdkVersion的值指定了目标安卓版本在此版本下
已通过测试
-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--
该便签为使用应用必须授予的权限android:name为权限名名字android.permission.WRITE_EXTERNAL_STORAGE为权限名属性值
不同属性值表示要授予不同的权限,该便签表示必须授权应用将数据写入外部储存的权限
-->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!--
应用必须授予的权限是 能在桌面创建快捷方式
-->
<uses-permission android:name="android.permission.INTERNET" />
<!--
申请访问网络的权限
-->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<!--
申请读取联系人信息的权限
-->
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<!--
申请管理账户的权限
-->
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<!--
申请验证账户的权限
-->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!--
申请获得gmail账户的权限
-->
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<!--
申请使用凭证的权限,与账户管理有关
-->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--
申请开机启动应用的权限
-->
<application
android:icon="@drawable/icon_app"
android:label="@string/app_name" >
<!--
1、manifest元素必须且只能包含一个application元素application元素中声明了应用需要用到的组件及其属性
2、android:icon 属性是应用的图标,属性值是对包含图片的可绘制资源的引用,即@res文件夹下的文件名/图片
3、android:label 属性是应用的标签,属性值是对字符串资源的引用
-->
<activity
android:name=".ui.NotesListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop"
android:theme="@style/NoteTheme"
android:uiOptions="splitActionBarWhenNarrow"
android:windowSoftInputMode="adjustPan" >
<!--
1、activity元素 声明了一个可视化界面是Activity类的一个子类应用所有的可视化界面都必须在清单里进行声明未声明的不会进行服务
2、android:name属性 是activity类的类名属性值必须是完全限定类名即带包名用.隔开的路径名,当前类名以.开头,.等于manifest
中的package的属性值所以完整类名是net.micode.notes.ui.NotesListActivity必须设置名字
3、android:configChanges属性 是指定了该activity类自动处理的配置变更若无该属性当配置变更时会重启该界面有该属性不会重启
保证一直活跃,属性值为该界面会自动处理的配置变更。
keyboardHidden 用户打开虚拟键盘orientation 用户更改手机界面反向旋转手机screenSize 界面方向改变后,界面尺寸改变
多个属性值之间用|分隔
4、android:label属性 是指定当前界面的便签和该activity元素嵌套的intent-filter元素的默认便签若未指定则为application元素里指定的便签
5、android:launchMode属性 是该activity类的启动模式一般用standard和singeTop模式standard默认模式下系统始终会
实例化一个新的activity进行intent传递singleTop模式下如果目标任务的栈顶有activity实例不会再实例化而是通过方法传递intent。
6、android:theme属性 指定了activity的主题是对样式资源的引用
7、android:uiOptions属性 指定了界面的额外选项属性值splitActionBarWhenNarrow是当竖屏是分隔出一个操作栏
8、android:windowSoftInputMode属性 指定了主窗口与包含软键盘窗口之间的交互方式
-->
<intent-filter>
<!--
intent-filter元素 指定了父activity、receiver、provider组件能够响应的intent对象不是指定的类型则过滤掉
通过子元素actioncategory、data来进行过滤器的大部分内容设置
组件之间通过intent传递消息
-->
<action android:name="android.intent.action.MAIN" />
<!--
action元素 指定了可接受的intent对象的操作android:name属性为操作名属性值为操作
intent对象有一些标准的操作形式为ACTION_MAIN、ACTION_INSERT等等在将标准操作分配给action元素时属性值为
android.intent.action.MAIN 这样的类型,若分配自定义操作,则属性值最好为 软件包名.操作名
android.intent.action.MAIN 该属性值表名当前activity为主程序入口即最先启动的activity
-->
<category android:name="android.intent.category.LAUNCHER" />
<!--
category元素 指定了可接受intent对象的类别 android:name为类别名属性intent中也有一些标准category在使用标准
category时也想action属性一样应加前缀android.intent.category.类别名,若要用自定义类别也最好软件包名.类别名
android.intent.category.LAUNCHER属性值 指定该activity是第一个启动的即应用主界面与android.intent.action.MAIN
配对使用
-->
</intent-filter>
</activity>
<activity
android:name=".ui.NoteEditActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/NoteTheme" >
<!--
1、指定类名为 net.micode.notes.ui.NoteEditActivity
2、自动处理的配置变更 软硬盘|屏幕旋转|界面大小改变
3、启动模式 singleTop 当目标任务的栈顶有该activity实例时不新实例化而只向其传递intent
4、界面主题 引用样式资源 NoteTheme
-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<!--
intent过滤器的action元素的 属性值为android.intent.action.VIEW指定该activity 是显示用户数据的,根据不同数据
显示不同界面
-->
<category android:name="android.intent.category.DEFAULT" />
<!--
指定该activity能接受隐式intent
-->
<data android:mimeType="vnd.android.cursor.item/text_note" />
<!--
data属性 是指定该intent携带的数据形式android:mimeType属性 是指定该数据的类型
/前面的与URI的数据有关如果URI的数据是图片则为image/后面的是具体的类型如图片的格式可以是jpg
vnd.android.cursor.item/text_note属性值 指定URI包含的数据是单条的且具体的类型是text_note
这个类型是自定义的URI的数据类型是通过provider的getTypeURL uri获得的
-->
<data android:mimeType="vnd.android.cursor.item/call_note" />
<!--
URI的数据是单条的类型是call_note
-->
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.INSERT_OR_EDIT" />
<!--
指定了该activity能响应的操作是 添加编辑联系人
-->
<category android:name="android.intent.category.DEFAULT" />
<!--
指定该intent的类别可以是隐式
-->
<data android:mimeType="vnd.android.cursor.item/text_note" />
<!--
指定了该intent携带的数据的类型数据是单条的类型为text_note
-->
<data android:mimeType="vnd.android.cursor.item/call_note" />
<!--
指定携带的数据类型数据是单条的类型为call_note
-->
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<!--
指定activity能响应的intent的动作是搜索即能开始搜索操作
-->
<category android:name="android.intent.category.DEFAULT" />
<!--
指定该intent为默认类别,可以是隐式intent
-->
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
<!--
1、meta-data元素 向父组件提供任一数据项的名值对(数据名称 对应值)
2、android:name="android.app.searchable" 指定该元素名称
3、android:resource 对资源的引用资源的ID为该名值对的值
4、如为android:value 也是对资源的引用,资源包含的值为该名值对的值
-->
</activity>
<provider
android:name="net.micode.notes.data.NotesProvider"
android:authorities="micode_notes"
android:multiprocess="true" />
<!--
1、provider元素 声明了一个content provider组件即一个ContentProvider的子类是用来向外界提供可访问内容的
2、该组件的名字为net.micode.notes.data.NotesProvider
3、android:authorities属性 是指定提供该内容的授权方,用来标识提供的数据的,至少一个,多个则分号分隔
4、android:multiprocess属性 指定了若应用在多个进程间运行时是否每个进程都有一个content provider实例true则是
-->
<receiver
android:name=".widget.NoteWidgetProvider_2x"
android:label="@string/app_widget2x2" >
<!--
1、receiver元素 声明了一个广播接受器即BroadcastReceiver的子类能接受来着系统其他应用自己应用的intent对象
即使其他组件未运行
2、该组件名称为 net.micode.notes.widget.NoteWidgetProvider_2x
3、标签 对字符串资源的引用 @string/app_widget2x2
-->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<!--
指定该receiver能响应的intent的动作为 应用挂件更新
-->
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<!--
指定响应intent的动作为 应用挂件删除
-->
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
<!--
指定响应的intent的动作为 私人模式变更
-->
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_2x_info" />
<!--
向该父组件 receiver 提供一个数据项的名值对,名为 android.appwidget.provider值为 资源@xml/widget_2x_info的id
-->
</receiver>
<receiver
android:name=".widget.NoteWidgetProvider_4x"
android:label="@string/app_widget4x4" >
<!--
声明了一个完全限定类名为net.micode.notes.widget.NoteWidgetProvider_4x的广播接收器子类标签为对@string/app_widget4x4
的引用
-->
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_DELETED" />
<action android:name="android.intent.action.PRIVACY_MODE_CHANGED" />
<!--
指定的响应动作 应用挂件更新,应用挂件删除,私人模式变更
-->
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget_4x_info" />
<!--
向该父组件提供一个数据项的名值对
-->
</receiver>
<receiver android:name=".ui.AlarmInitReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<!--
声明一个广播接收器组件响应的intent的动作为 开机自启
-->
</receiver>
<receiver
android:name="net.micode.notes.ui.AlarmReceiver"
android:process=":remote" >
<!--
声明一个广播接收器组件android:process=":remote"属性 指定该组件的进程名为:remote
-->
</receiver>
<activity
android:name=".ui.AlarmAlertActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Holo.Wallpaper.NoTitleBar" >
<!--
声明了一个界面android:launchMode属性 指定了该activity的启动模式为singleInstance即为该activity创建一个单独的任务栈
且只能有一个该activity其他activity不能进入界面主题 @android:style/Theme.Holo.Wallpaper.NoTitleBar的引用
-->
</activity>
<activity
android:name="net.micode.notes.ui.NotesPreferenceActivity"
android:label="@string/preferences_title"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Holo.Light" >
<!--
声明了一个界面启动模式singleTop主题@android:style/Theme.Holo.Light的引用
-->
</activity>
<service
android:name="net.micode.notes.gtask.remote.GTaskSyncService"
android:exported="false" >
<!--
1、声明了一个服务组件Service的子类完全限定类名为net.micode.notes.gtask.remote.GTaskSyncService
2、android:exported属性 指定了该组件是否能被其他应用所访问,交互
-->
</service>
<meta-data
android:name="android.app.default_searchable"
android:value=".ui.NoteEditActivity" />
<!--
向父组件 application提供了一个数据项的名值对名为android.app.default_searchable值为net.micode.notes.ui.NoteEditActivity
类包含的值
-->
<provider
android:authorities="com.example.cameraalbumtest.fileprovider"
android:name="androidx.core.content.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
/>
</application>
</manifest>