AndroidManifest.xml

戏子无情 提交于 2020-01-01 02:48:12

AndroidManifest.xml配置文件的根元素,必须包含一个元素且指定xlmns:android和package属性

xlmns:android指定了Android的命名空间

package是标准的包名,为了避免命名空间的冲突,一般会以应用的域名来作为包名

android:versionCode:是给设备程序识别版本用的,必须是一个整数值,代表App更新过多少次

android:versionName则是给用户查看版本用的,需要具备一定的可读性比如“1.0”

android:installLocation是安装参数,instllLocation有三个值可以选择:

internalOnly(必须安装到内部才能运行),

auto(系统将会根据存储空间自己去适应),

perferExternal(系统会优先考虑将APK安装到SD卡上。当然最终用户可以选择为内部ROM,若SD存储已满,也会安装到内部存储上)。

注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD上

 

为了保证Android应用的安全性,应用框架指定了比较严格的权限系统,一个应用必须声明了正确的权限才可以使用相应的功能

 

android:icon这个是整个APP的图标,图片一般放在drawable文件夹下

android:allowbackup是否将程序加入到系统的备份和恢复架构中

android:theme是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style

android:label="@string/app_name"   label表示标签,@表示引用,@string/app_name是从string文件中引用叫app_name的这个键值对的值,作用是为你当前的ViewGroup设置一个标签

<intent-filter android:icon=:drawable resource"

android:lable="string resource"

android:priority="integer".

<action/>

<category/>

<data/>

</intent-filter>

action属性:只有android:name属性,常见的android:name值为android.intent.action.MAIN,表明此activity是作为应用程序的入口

category属性:也只有android:name属性,常见的android:name值为android.intent.category.LAUNCHER(决定应用程序是否显示在程序列表里)

 

 

<!--  -->是注释用的,注释代码,帮助阅读着理解代码

1.1<permission/>与<uses-permission/>

在android系统的安全模型中,应用程序在默认的情况下不可以执行任何对其他应用程序、系统或者用户带来负面影响的操作。如果应用需要执行某些操作,就需要声明使用这个操作对应的权限

1.1.1<permission/>

是自己定义的权限,就是别人调用这个程序时要用<permission/>来声明

android:decesion:对权限的描述,一般是两句话,第一句话描述这个权限所针对的操作,第二句告诉用户授予app这个权限会带来的后果。

android:label:对权限的一个简短描述

android:name:权限的唯一标识,一般都是使用包名加权限名

android:protectionLevel:权限的等级

normal是最低的等级,声明此权限的app,系统会默认授予此权限,不会提示用户

dangerous权限相应的操作有风险,系统在安装声明此权限的app是会提示用户

siganture权限表明的操作只针对使用同一个证书签名的app开放

signatureOrSystem与signature类似,只是增加了ROM中自带的app声明

android:name属性是必须的,其他的可选,未写的系统会指定默认值

1.1.2<uses-permission/>

android.permission.ACCESS_COARSE_LOCATION

//允许应用程序访问CellID或WiFi热点来获取粗略的位置

android.permission.ACCESS_COARSE_UPDATES

 

android.permission.ACCESS_FINE_LOCATION

//允许一个程序访问精良位置(如GPS)

android.permission.ACCESS_LOCATION_EXTRA_COMMANDS

//允许应用程序访问额外的位置提供命令

android.permission.ACCESS_MOCK_LOCATION

//允许应用程序模拟位置用于测试

android.permission.ACCESS_NETWORK_STATE

//允许程序访问有关的网络信息

android.permission.ACCESS_WIFI_STATE

//允许程序访问WIFi网络状态信息

android.permission.BAIDU_LOCATION_SERVICE

//允许程序用百度地图访问位置

android.permission.CALL_PHONE

//允许应用程序初始化一个电话拨号,不需通过拨号用户界面需要用户确认

android.permission.CHANGE_NETWORK_STATE

//允许程序改变网络状态

android.permission.READ_EXTERNAL_STORAGE

//允许程序读取设备外部存储空间

android.permission.READ_LOGS"

//允许程序读取底层系统日志文件

android.permission.READ_PHONE_STATE
//允许读取电话的状态

android.permission.RECEIVE_USER_PRESENT

//允许用户唤醒机器

android.permission.INTERNET

//允许程序打开网络sockets

android.permission.MOUNT_UNMOUNT_FILESYSTEMS

//允许挂载和反挂载文件系统可移动存储

android.permission.VIBRATE
//允许访问振动设备

android.permission.SYSTEM_ALERT_WINDOW
//允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层

android.permission.WRITE_SETTINGS
//允许程序读取或写入系统设置

android.permission.WAKE_LOCK
//允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失

android.permission.WRITE_EXTERNAL_STORAGE
//允许应用写(非读)用户的外部存储器

 

1.2<application/>

1.2.1<activity/>

android:configChanges="orientation|keyboardHidden|screenSize"

当配置了这个属性后,当我们横竖屏进行切换的时候会直接调用onCreate方法中的onConfigurationChanged方法,而不会重新执行onCreate方法

android:windowSoftInputMode="stateVisible|adjustPan|stateHidden"

android:windowSoftInputMode属性

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,这个属性能影响两件事情:

(1)当有焦点产生时,软键盘是隐藏还是显示

(2)是否减少活动主窗口大小以便腾出空间放软键盘

他的设置必须是下面列表中的一个值,或一个“state。。:值加一个”adjust。。:值的组合,在任一组设置多个值,各个值之间用“|”分开

值的含义:

stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖主体的设置

stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示

stateHidden:当用户选择activity时,软键盘总是被隐藏

stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的

stateVisisble:软键盘通常是可见的

stateAlwaysVisible:当用户选择activity时,软键盘总是显示的状态

adjustUnspecifiled:默认设置,通常由系统自行决定是现实还是隐藏

adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间

adjustPan:当前窗口的内容将自动移动以便当前焦点不被键盘覆盖和用户总是能看到输入的内容的部分

1.2.2<service/>

android:editabled=“true“设置是否可编辑,true可编辑,false不可编辑

android:enabled

Android系统是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可被enabled,如果为false,它覆盖组件指定的值,多有组件都是disabled

android:exported

这个属性用于只是该服务是否能够被其他应用组件调用或跟他交互,如果为true,则能被调用或交互,为false是,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务

android:priority执行优先级,默认为0,值越大优先级越高

1.2.3<meta-data/>

<meta-data/>元素可以作为子元素,被包含在<activity>、<application/>、<sercice/>和<receiver/>元素中,但不同的父元素,在应用时读取的方法也不同

读取:

在<activity>中应用<meta-data/>元素:

ActivityInfo info=this.getPackageManager().getActivityInfo(getComponentName(),

pakageManager.GET_META_DATA);

String msg=info.metaData.getString("data_Name");

Log.d(TAG,"msg=="+msg);

在<application/>中应用<meta-data/>元素:

ApplicationInfo appInfo=this.getPackageManager().getApplicationInfo(getPackageName(),

pakageManager.GET_META_DATA);

String msg=appinfo.metaData.getString("data_Name");

Log.d(TAG,"msg=="+msg);

在<sercice/>中应用<meta-data/>元素:

ComponentName cn=new ComponentName(this,MetaDataService.class);

ServiceInfo info=this.getPackageManager().getServiceInfo(cn,PackageManager.GET_META_DATA);

String msg=info.metaData.getString("data_Name");

Log.d(TAG,"msg=="+msg);

在<receiver/>中应用<meta-data/>元素:

ComponentName cn=new ComponentName(context,MetaDataService.class);

ActivityInfo info=context.getPackageManager().getReceiverInfo(cn,PackageManager.GET_META_DATA);

String msg=info.metaData.getString("data_Name");

Log.d(TAG,"msg=="+msg);

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!