zoukankan      html  css  js  c++  java
  • android学习笔记30——AndroidMainfest.xml

    Manifest.xml文件的职责:
    指定APP的包名.
    声明四大组件, 以及启动方式.
    指定APP运行的进程名称.
    指定APP权限.
    指定最小API版本.
    指定需要连接的库.

    Manifest.xml的格式:
    <?xml version="1.0" encoding="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>
    <action />
    <category />
    <data />
    </intent-filter>
    <meta-data />
    </activity>

    <activity-alias>
    <intent-filter> . . . </intent-filter>
    <meta-data />
    </activity-alias>

    <service>
    <intent-filter> . . . </intent-filter>
    <meta-data/>
    </service>

    <receiver>
    <intent-filter> . . . </intent-filter>
    <meta-data />
    </receiver>

    <provider>
    <grant-uri-permission />
    <meta-data />
    <path-permission />
    </provider>

    <uses-library />

    </application>
    </manifest>

    全部标签:
    <action>
    <activity>
    <activity-alias> ==》activity-alias是android里为了重复使用Activity而设计的。
    <application>
    <category>
    <data>
    <grant-uri-permission>

    <instrumentation>
    ==》Instrumentation和Activity有点类似,只不过Activity是需要一个界面的,而Instrumentation并不是这样的,我们可以将它理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

    <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.xml文件规则:
    1.标签: 只有<manifest>和<application>是必须的, 它们俩只能被声明一次. 其余都是可选标签.
    在同一级别的标签没有先后顺序的要求, 不过这里有一个例外:<activity-alias>必须紧跟<activity>.
    2.属性: 理论上讲所有的属性都是可选的. 除了<application>标签外, 其他标签的属性都以android:前缀开头.
    3.声明类名: 很多标签都对应一个Java的对象, 包括<application>以及四大组件.
    Android规定使用name属性来为标签指定一个Java类。

    比如下面是为一个Service指定类名:
    <manifest . . . >
    <application . . . >
    <service android:name="com.example.project.SecretService" . . . >
    . . .
    </service>
    . . .
    </application>
    </manifest>
    如果类所在名跟包名一样, 则可以简写成一个”.”, 比如:
    <manifest package="com.example.project" . . . >
    <application . . . >
    <service android:name=".SecretService" . . . >
    . . .
    </service>
    . . .
    </application>
    </manifest>
    启动一个组件的时候, Android会创建一个被指定的子类的实例, 如果没指定的话, 那么Android会创建一个组件基类的实例.

    4.单个属性多个值: 有些属性可以接收多个值, 通常我们会这样使用重复的属性:
    <intent-filter . . . >
    <action android:name="android.intent.action.EDIT" />
    <action android:name="android.intent.action.INSERT" />
    <action android:name="android.intent.action.DELETE" />
    . . .
    </intent-filter>

    5.引用资源: 有些属性值需要我们引用资源文件, 跟之前描述资源文件的用法一样,
    只需要使用@[package:]type:name格式来引用资源即可:<activity android:icon="@drawable/smallPic" . . . >

    6.使用字符串: 当属性值是字符串的时候, 使用转义字符必须加”\”, 比如”\n”用于换行, “\uxxxx”用于Unicode

    Manifest.xml的文件特性:
    1.Intent Filters:
    Intent是启动Android组件的重要工具,Intent意为”意图”, 是启动组件的”信使”, 它包括需要传送的数据(data), 处理action的组件的种类(category)和其它的相关说明. Android根据Intent来启动一个对应的组件, 然后将Intent传递给它.
    每个组件可以包含多个<Intentfilter>, 它告诉Android自己想要接收的Intent长啥样. 当一个Intent明确指定了组件名称的时候(显示启动activity), Intent filter就不再发挥作用. 但是对于不指定名字的Intent(隐式启动activity),那么它只能启动符合的Intent filter的组件.

    2.图标和标签:
    很多标签都有图标(icon)和标签(label)属性, 它们分别指定了小图标和文字标签给用户. 有些还支持更长的description属性可以显示更长的文字信息. 如果一个标签包含了icon和label属性, 那么它们会成为子标签的默认属性. 所以只要设置了<application>的icon和label属性, 那么它们会成为application内所有组件的默认icon和label属性.

    3.权限(permission): 权限是限制APP访问指定数据的约束性标签. 它用来指定APP拥有的权限. 是一串字符串, 如:
    android.permission.CALL_EMERGENCY_NUMBERS ==>拨打紧急号码
    android.permission.READ_OWNER_DATA ==>允许程序读取所有者的数据
    android.permission.SET_WALLPAPER ==>设置壁纸
    android.permission.DEVICE_POWER ==>设备电源权限
    上述四个分别对应拨打紧急号码, 允许程序读取所有者的数据, 设置壁纸, 设备电源权限. 如果APP想访问某个被permission保护的权限, 那么必须用<user-permission>标签申请该权限. 在安装的时候, 系统将会检查这些权限, 并且将敏感权限提示给用户,由用户决定是否安装.
    一款APP也可以通过权限管理来保护自己的组件, 可以使用Android提供的permissions(在android.Manifest.permission中列出), 也可以使用其它APP定义的permission,还可以自己定义.

    定义一个permission的代码如下:
    <manifest . . . >
    <permission android:name="com.example.project.DEBIT_ACCT" . . . />
    <uses-permission android:name="com.example.project.DEBIT_ACCT" />
    . . .
    <application . . .>
    <activity android:name="com.example.project.FreneticActivity"
    android:permission="com.example.project.DEBIT_ACCT"
    . . . >
    . . .
    </activity>
    </application>
    </manifest>
    这里需要注意的是:
    所有需要访问被DEBIT_ACCT保护的Activity的组件, 都得使用<user-permission>来声明该权限, 就算在自己的APP内部也是如此.
    <permission-tree>标签用于为同一组permission声明命名空间.<permission-group>则为一组permission定义一个label. 它只影响权限向用户展示的方式. <permission-group>仅仅用于给出一个组的名字, 并不指定权限是如何分组的.决定permission如何分组的是<permission>中的permissionGroup属性.

    4.库(Libraries):
    每个Android APP都会与Android默认的基础库连接, 包括基础的类, 比如Activity, Service, Intent, Button, View等. 然而有些时候我们也需要为我们的APP连接外部的库, 这些库需要<uses-library>标签指定.

  • 相关阅读:
    抽签问题及优化
    P1020
    p1852ants
    1,三角形
    TG3
    如何看懂一篇题解
    Unsupported major.minor version 51.0 错误解决方案
    weblogic初学笔记2-在Linux上部署项目
    一块移动硬盘怎样兼容Mac和Windows系统,并且可以在time machine上使用
    org.hibernate.HibernateException: connnection proxy not usable after transaction completion
  • 原文地址:https://www.cnblogs.com/YYkun/p/5833182.html
Copyright © 2011-2022 走看看