您的位置:首页 > 移动开发 > Android开发

Android学习笔记3——Android的Manifest文件介绍

2014-11-01 16:05 218 查看
在Android能够启动一个app组件之前,android系统必须通过读取manifest文件来知道这个组件的存在,你的app必须在这个文件中定义所有的组件,并且这个文件必须包含在app根目录下。

在manifest文件中为了定义这个app的组件需要做一些事情,例如:

1、定义这个app所要求的权限,例如访问网络或者是读取联系人的权限;

2、定义这个app所需要的最小API level;

3、定义这个app所需的硬件和软件的特性,例如照相机,蓝牙服务,或者多点触屏;

4、这个app需要的API库,例如Google Maps library.

定义组件:

这个manifest文件最主要的任务是通知这个系统这个app的全部组件,例如:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:icon="@drawable/app_icon.png" ... >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" ... >
        </activity>
        ...
    </application>
</manifest>

在application这个元素中android:icon属性指定了这个应用图标的路径,acitivity这个元素中android:name指定了这个activity的类名称和android:lable属性指定了这个activity的标题。用这种方式可以定义service receiver provider,而那些没有定义在manifest文件中的组件对系统是不可见的,不被运行。然而broadcast reiceiver 既能够被定义在manifest文件中,也可以动态通过registerReceiver在代码中注册。
如何定义组件的功能呢?

正如前面所描述的,我们可以通过Intent来启动Activity、Services和broadCast receiver,我们能够把要启动的目标组件封装到Intent中来达到启动特定组件的目的。然而,Intents的真正的作用在于Intent的概念上。一个模糊不清的INtent的仅仅描述了要进行的行为类型,让系统可以找到能够实现定义行为并启动它,如果都有多个组件能够实现所定义的行为,系统就会让用户选择一种。

系统这种识别出能够相应所定义Intent的组件的方法是把所接收到的Intent和设备中所有app的manifest文件中所定义的Intent filter做比较。

当你在你的app的manifest文件中定义一个activity时,你必须包含能够定义这个activity功能的intent filter以至于它能够相应其他app的Intent。你能为你的组件定义一个intent filer 通过想这个组件的定义元素中增加一个Intent filer子元素。例如

<manifest ... >
    ...
    <application ... >
        <activity android:name="com.example.project.ComposeEmailActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest>

定义app的要求:

拥有android系统的各种各样的设备上,并不是所有的都拥有同样的特性和功能。为了防止你的app安装在你的app不支持的设备上,在你的app的manifest文件中明确清晰的定义出你的app支持的设备类型和软件要求是非常重要的,这些定义的信息大部分系统是不会读取他们的,只是外部服务例如Google PLay去读取他们为了当用户为他们的设备搜索app时提供过滤。

例如。如果你的app需要照相功能并且需要在android2.1才会才会拥有的api,你应该在你的manifest文件中如此定义。

<manifest ... >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    ...
</manifest>

这样如果一个设备上没有照相功能,或者系统版本低于2.1,则这个设备就不会从Google Play中安装你的app.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: