AndroidManifest.xml 最全详解(二)

简介: AndroidManifest.xml 最全详解

4、meta-data:属性


<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string"/>

这是该元素的基本结构.可以包含在 四个元素中。


android:name(解释:元数据项的名字,为了保证这个名字是唯一的,采用java风格的命名规范,如com.woody.project.fried)


android:resource(解释:资源的一个引用,指定给这个项的值是该资源的id。该id可以通过方法Bundle.getInt()来从meta-data中找到。)


android:value(解释:指定给这一项的值。可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法:[getString],[getInt],[getFloat],[getString],[getBoolean])


5、activity-alias:属性


<activity-alias android:enabled=["true" | "false"]
                android:exported=["true" | "false"]
                android:icon="drawable resource"
                android:label="string resource"
                android:name="string"
                android:permission="string"
                android:targetActivity="string">
<intent-filter/> 
<meta-data/>
</activity-alias>

是为activity创建快捷方式的,如下实例:

<activity android:name=".shortcut">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
</activity>
 <activity-alias android:name=".CreateShortcuts" android:targetActivity=".shortcut" android:label="@string/shortcut">
    <intent-filter>
             <action android:name="android.intent.action.CREATE_SHORTCUT" />
             <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
 </activity-alias>

其中android.targetActivity是指向对应快捷方式的activity,如上述的shortcut(此Activity名)

android:label是指快捷方式的名称,而快捷方式的图标默认是给定的application图标


6、Service:属性


【1】service与activity同级,与activity不同的是,它不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。比如听音乐,网络下载数据等,都是由service运行的


【2】service生命周期:Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法


【3】service与activity间的通信


Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),Activity与service间的通信主要用IBinder负责。


【4】

<service android:enabled=["true" | "false"]
         android:exported[="true" | "false"]
         android:icon="drawable resource"
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string">
</service>

service标签内的属性之前已有描述,在此不重复了~


7、Receiver:属性


receiver的属性与service一样,这里就不显示了


BroadcastReceiver:用于发送广播,broadcast是在应用程序之间传输信息的一种机制,而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件,具体参照http://kevin2562.javaeye.com/blog/686787


8、Provider:属性


<provider android:authorities="list"
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string">
           <grant-uri-permission/>
           <meta-data/>
</provider>

contentProvider(数据存储)


【1】android:authorities:


标识这个ContentProvider,调用者可以根据这个标识来找到它


【2】android:grantUriPermission:


对某个URI授予的权限


【3】android:initOrder


9、uses-library


用户库,可自定义。所有android的包都可以引用


10、supports-screens


<supports-screens  android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />

这是在android1.6以后的新特性,支持多屏幕机制

各属性含义:这四个属性,是否支持大屏,是否支持中屏,是否支持小屏,是否支持多种不同密度


11、uses-configuration 与uses-feature性能比较


1.<uses-configuration  android:reqFiveWayNav=["true" | "false"] 
                    android:reqHardKeyboard=["true" | "false"]
                    android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" |   "twelvekey"]
                    android:reqNavigation=["undefined" | "nonav" | "dpad" |  "trackball" | "wheel"]
                    android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
<uses-feature android:glEsVersion="integer"
              android:name="string"
              android:required=["true" | "false"] />

这两者都是在描述应用所需要的硬件和软件特性,以便防止应用在没有这些特性的设备上安装。


12、uses-sdk


1.<uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer"/>

描述应用所需的api level,就是版本,目前是android 2.2 = 8,android2.1 = 7,android1.6 = 4,android1.5=3

在此属性中可以指定支持的最小版本,目标版本以及最大版本


13、instrumentation


<instrumentation android:functionalTest=["true" | "false"]
                 android:handleProfiling=["true" | "false"]
                 android:icon="drawable resource"
                 android:label="string resource"
                 android:name="string"
                 android:targetPackage="string"/>

定义一些用于探测和分析应用性能等等相关的类,可以监控程序。在各个应用程序的组件之前instrumentation类被实例化


android:functionalTest(解释:instrumentation类是否能运行一个功能测试,默认为false)


14、permission、uses-permission、permission-tree 、permission-group 区别


最常用的当属,当我们需要获取某个权限的时候就必须在我们的manifest文件中声明,此与同级,具体权限列表请看此处


通常情况下我们不需要为自己的应用程序声明某个权限,除非你提供了供其他应用程序调用的代码或者数据。这个时候你才需要使用 这个标签。很显然这个标签可以让我们声明自己的权限。比如:

<application . . .>
        <activity android:name="XXX" . . . >            <                    <android:permission="com.teleca.project.MY_SECURITY"> </activity>
 </application>

当然自己声明的permission也不能随意的使用,还是需要使用来声明你需要该权限


就是声明一个标签,该标签代表了一组permissions,而是为一组permissions声明了一个namespace。


注:以上资源可以查看官方文档https://developer.android.google.cn/reference/android/


四、分享几个常用方法


/**获取APP版本号
     * @param context
     * @return
     */
    public static String getAppVersion(Context context) {
         try {
            // 获取packagemanager的实例
            PackageManager packageManager = context.getPackageManager();
            // getPackageName()是你当前类的包名,0代表是获取版本信息
            PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(),0);
            String version = packInfo.versionName;
            return version;
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
         return null;
    }
    /**
     * get android os version no
     * @return
     */
    public static float getAndroidVersion() {
        return Float.valueOf(android.os.Build.VERSION.RELEASE);
    }
    /**
     * get device model
     * @return
     */
    public String getDeviceModel () {
        return android.os.Build.MODEL;
    }
    /**
     * get android os sdk version  2.2 = 8,2.3 = 9,4.2.1 = 17
     * @return sdk version
     */
    public static int getSDKVersion(){
        return android.os.Build.VERSION.SDK_INT;
    }

后面我们将讲解安卓的组件化SPI,更多教程请关注作者

相关文章
|
4月前
|
XML 存储 数据库
什么是 XML?
【8月更文挑战第22天】
59 0
|
7月前
|
Java API 开发工具
AndroidManifest.xml常用标签属性介绍
AndroidManifest.xml常用标签属性介绍
102 0
|
7月前
|
XML 数据格式
|
XML Java 区块链
为什么需要用xml
为什么需要用xml
|
XML JSON JavaScript
了解xml
即使在xml被json'替代的今天,你也应该了解它。
170 0
|
传感器 Java 定位技术
AndroidManifest.xml 最全详解(一)
AndroidManifest.xml 最全详解
1534 0
|
XML 存储 数据处理
xml
xml
103 0
|
XML JavaScript Java
XML就是这么简单
什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标记语言)–在不同的机器进行通信的数据规范 sgml(标准通用标记语言) html(超文本标记语言) 为什么我们需要...
1280 0
|
Android开发 数据格式 XML
|
Web App开发 JavaScript 数据格式