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,更多教程请关注作者

相关文章
|
Shell API Android开发
android queries属性
android queries属性
1179 2
|
JavaScript 前端开发
若依框架文档开发手册----开发中常用功能模块(中)
若依框架文档开发手册----开发中常用功能模块
4776 0
|
缓存 中间件 流计算
如何解决 Netty Channel.isWritable 返回 false
在 Netty 里,有4个方法用来查询 Channel 的状态:isOpen,isRegistered,isActive,isWritable,其中,isWritable 在并发量很高时会返回很多 false。 isWritable 是什么含义? isWritable:Returns true if and only if the I/O thread will perform the req
3139 0
如何解决 Netty Channel.isWritable 返回 false
|
4月前
|
弹性计算 固态存储 调度
阿里云99元服务器ECS经济型e实例ecs.e-c1m1.large详细介绍,CPU采用Intel Xeon Platinum架构处理器
阿里云99元/年服务器ECS经济型e实例,2核2G配置,Intel Xeon Platinum处理器,3M独享带宽,40G ESSD Entry系统盘,分配独立公网IP,不限流量,新老用户均可购买,续费同价,性价比高,适合个人建站、开发测试等轻量应用。
370 1
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
608 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
Java Android开发 Windows
使用keytool查看Android APK签名
本文介绍了如何使用Windows命令行工具和keytool查看APK的签名信息,并提供了使用AOSP环境中的signapk.jar工具对APK进行系统签名的方法。
2231 0
使用keytool查看Android APK签名
|
存储 Java 数据库连接
Java中的数据持久化技术详解
Java中的数据持久化技术详解
|
easyexcel
EasyExcel动态合并单元格
EasyExcel动态合并单元格
953 0
Fragment 出栈的方法popBackStack
Fragment 出栈的方法popBackStack
369 0
|
缓存 前端开发 JavaScript
加速你的网站:一文看懂预加载和懒加载
加速你的网站:一文看懂预加载和懒加载

热门文章

最新文章