|
|
<?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、每个AndroidManifest,xml文件中必须包含其只能包含一个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.1;1.2;1.2.1 这样的形式
|
|
|
-->
|
|
|
|
|
|
<uses-sdk android:minSdkVersion="14" />
|
|
|
<!--
|
|
|
配置SDK版本的,在此标签下,可以给android:minSdkVersion, android:maxSdkVersion,android: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对象,不是指定的类型则过滤掉
|
|
|
通过子元素action,category、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的getType(URL 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>
|