首页 > 代码库 > [Android]XML那些事儿-manifest属性1

[Android]XML那些事儿-manifest属性1

 

  在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置.

android:installLocation隶属于AndroidManifest.XML中的manifest节点.如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto"|"internalOnly"|"preferExternal"] > ... </manifest>

 

android:installLocation可以设置为"auto"、"internalOnly"、"preferExternal"三个值中的任何一个.
<span >  auto:程序可能被安装在外部存储介质上(例如:SD Card),但是默认会被安装到手机内存中.当手机内存为空时,程序将被安装到外部存储介质上.当程序安装到手机上后,用户可以决定把程序放在外部储介质还是内存中.
  internalOnly:默认值.当设置为该值时,程序只能被安装在内存中,如果内存为空,则程序将不能成功安装.
  preferExternal:将程序安装在外部存储介质上,但是系统不保证程序一定会被安装到外部存储介质上.当外部存储介质不可以或空时,程序将被安装到内存中.程序使用了for   ward-locking机制时也将被安装到内存中,因为外部存储不支持此机制.程序安装后,用户可以自由切换程序应该在外部还是内部存储介质上.

<span ><span ><span > <span >  注意:当程序使用了Google Play的Copy Protection特性时,只能安装到内存中.
<span >    当程序被安装到外部存储介质时,
<span >  ① .apk文件将被移动到外部存储介质上,但是程序的数据仍然会在内存中
<span >  ② 保存.apk文件的容器将会使用一个随机生成的密钥进行加密,这样只有安装该程序的设置可以使用存在外部存储介质上的数据.
<span >  警告<span >:当外部存储介质被卸载时,安装在该外部存储介质上的程序将立刻被终止掉!
  向后兼容性:
    声明了android:installLocation,但android:minSdkVersion小于8时,我们使用不低于Froyo的AVD进行编译,这样在低于Froyo的系统中android:installLocation将被忽略,而不低于Fro  yo的系统中将使用我们指定的android:installLocation.

<span >  当我们的程序具有如下行为时我们不应该将程序安装到外部存储介质上

  ①Service

    正在运行的服务将被终止,当外部存储介质被重新加载时服务不会被重启.

  ②Alarm Service

    闹钟服务将被取消,开发者必须在外部存储介质重新加载后重新注册闹钟服务.

  ③Input Method Engines

    输入法将被换成系统输入法,当外部存储介质被重新加载后用户可以通过系统设置来启动我们的输入法

  ④Live Wallpapers

    我们的动态壁纸将被替换为默认的动态壁纸.外部存储介质重载后,用户可以更换回来.

  ⑤Live Folders

    我们的动态文件夹将被移出.

  ⑥App Widgets

    我们的小部件将被移出,通常只有系统重启后我们的小部件才可用.

  ⑦Account Managers

    使用AccountManager创建的账户将会消失,直至存储介质被重新加载.

  ⑧Sync Adapters

    只有外部存储介质被重新加载时,我们的同步功能才可用

  ⑨Device Administrators

    我们的DeviceAdminReceiver将会失效

  ⑩监听开机结束事件

    系统会在加载外部存储介质之前发送ACTION_BOOT_COMPLETED广播.因此安装在外部存储介质的程序将不能接受开机广播.

  通常,只要我们没有使用上述的特性,我们就可以将我们的程序安装到外部存储介质上.例如,大的游戏程序.当我们的APK文件有几M大时我们应该认真的考虑是否要将程序移动到外部存储介质上以帮助用户节省内存.

/////////////////////////////////////////////////////PackageInfo////////////////////////////////////////////////////////

  当我的app需要校对版本的时候怎样读取这个值呢?
  方法(1)
  不是去读 manifest.xml 而是在里面定义 android:versionName="@string/app_versionName" 然后在 res/values/strings.xml 里定义一个同名 string item :
 <string name="app_versionName">1.1</string> 

 

  就这么简单~ 读取 strings.xml 就可以了
  用这种方法在market发布的时候遇到了问题

_________________________________________________________________________

方法(2)

  有些market的程序包括官方的android market(电子市场)和安卓网(hiapk.com) 会直接解释你上传的apk包,用上述方法会得不到versionCode 和Name 甚至会认为这是一个不规范不合法的安装包。
  怎么办呢,还是循规蹈矩想想怎么从AndroidManifest.xml里读取这个值好了。
  以下是网上搜到的一种方法,试验过ok~要记得放在 onCreate()里,setContentView()之后才能用哦~
 String appVersion; PackageManager manager = this.getPackageManager(); try { PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0); appVersion = info.versionName; //版本名 appCode = info.versionCode;//版本代码更新次数 } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }

 

//////////////////////////////////////xmlns:android///////////////////////////////////////////////

  xmlns:android="http://schemas.android.com/apk/res/android的作用是
这个是xml的命名空间,有了他,你就可以alt+/作为提示,提示你输入什么,不该输入什么,什么是对的,什么是错的,也可以理解为语法文件。或者语法判断器什么的,
这个主要作用是在运行的时候那些控件的属性都是通过它来识别的,如果上面你写错了,不会有任何问题,但是在运行的时候就会有问题,提示你没有指定宽度等什么。这个是不用联网的。
  Android 自定义的xmlns其实很简单,语法规则是:在使用到自定义View的xml布局文件中需要加入xmlns:前缀=http://schemas.android.com/apk/res/你的应用程序包路径.
  也可以参考具体例子:http://blog.csdn.net/chuchu521/article/details/8052855
 
 
//////////////////////////////////////uses-feature//////////////////////////////////////////////
如果你是一个Android用户,而且你有一个老旧的安装有android 1.5 的android设备,你可能会注意到一些高版本的应用没有在手机上的Android Market 中显示。这必定是应用使用了<uses-feature>的结果。

Android Market会根据uses-feature过滤所有你设备不支持的应用。通过使用<uses-feature>元素,一个应用可以指定它所支持的硬件型号,举个例子,有些设备不支持多点触控或者OpenGL ES 2.0,那么过滤器就会过滤需要这些硬件支持(多点触控或者OpenGL ES 2.0)的应用,用户就不会在android market上看到这些应用。

一个<uses-feature>元素包含以下属性:
<uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer" />

name属性指定了应用的特征,required属性告诉过滤器我们是否在任何情况下必须要需要这个设备的支持,或者仅仅只是“nice to have”。

NOTE有些设备所反映的性能特征是不正确的,所以开发你的应用的时候尽量去支持各种不同的设备。要谨慎使用<uses-feature>。

现在就以硬件而言,你的应用已经直接地减少了许多安装量,这将直接影响到你应用的销量。所以当你定义<uses-feature>之前请慎重考虑。举个例子,如果你的游戏需要有多点触控的支持,但是我们也可以思考另外一种方法,是游戏能够在支持单点触控的设备上运行良好,我们就可以写2个路径的代码,分别在两种设备上运行。

/////////////////////////////////uses-permission/////////////////////////////////

在编写Android程序时经常会忘记添加权限,下面是网上收集的关于Android uses-permission的资料,方便查找~

 android.permission.ACCESS_CHECKIN_PROPERTIES //允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LOCATION //允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location) android.permission.ACCESS_FINE_LOCATION //允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS //允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) android.permission.ACCESS_MOCK_LOCATION //允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing) android.permission.ACCESS_NETWORK_STATE //允许程序访问有关GSM网络信息(Allows applications to access information about networks) android.permission.ACCESS_SURFACE_FLINGER //允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger’s low level features) android.permission.ACCESS_WIFI_STATE //允许程序访问Wi-Fi网络状态信息(Allows applications to access information about Wi-Fi networks) android.permission.ADD_SYSTEM_SERVICE //允许程序发布系统级服务(Allows an application to publish system-level services). android.permission.BATTERY_STATS //允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics) android.permission.BLUETOOTH //允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices) android.permission.BLUETOOTH_ADMIN //允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices) android.permission.BRICK 请求能够禁用设备(非常危险)(Required to be able to disable the device (very *erous!).) android.permission.BROADCAST_PACKAGE_REMOVED //允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed) android.permission.BROADCAST_STICKY //允许一个程序广播常用intents(Allows an application to broadcast sticky intents) android.permission.CALL_PHONE //允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.) android.permission.CALL_PRIVILEGED //允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed) android.permission.CAMERA 请求访问使用照相设备(Required to be able to access the camera device. ) android.permission.CHANGE_COMPONENT_ENABLED_STATE //允许一个程序是否改变一个组件或其他的启用或禁用(Allows an application to change whether an application component (other than its own) is enabled or not. ) android.permission.CHANGE_CONFIGURATION //允许一个程序修改当前设置,如本地化(Allows an application to modify the current configuration, such as locale. ) android.permission.CHANGE_NETWORK_STATE //允许程序改变网络连接状态(Allows applications to change network connectivity state) android.permission.CHANGE_WIFI_STATE //允许程序改变Wi-Fi连接状态(Allows applications to change Wi-Fi connectivity state) android.permission.CLEAR_APP_CACHE //允许一个程序清楚缓存从所有安装的程序在设备中(Allows an application to clear the caches of all installed applications on the device. ) android.permission.CLEAR_APP_USER_DATA //允许一个程序清除用户设置(Allows an application to clear user data) android.permission.CONTROL_LOCATION_UPDATES //允许启用禁止位置更新提示从无线模块(Allows enabling/disabling location update notifications from the radio. ) android.permission.DELETE_CACHE_FILES //允许程序删除缓存文件(Allows an application to delete cache files) android.permission.DELETE_PACKAGES //允许一个程序删除包(Allows an application to delete packages) android.permission.DEVICE_POWER //允许访问底层电源管理(Allows low-level access to power management) android.permission.DIAGNOSTIC //允许程序RW诊断资源(Allows applications to RW to diagnostic resources. ) android.permission.DISABLE_KEYGUARD //允许程序禁用键盘锁(Allows applications to disable the keyguard ) android.permission.DUMP //允许程序返回状态抓取信息从系统服务(Allows an application to retrieve state dump information from system services.) android.permission.EXPAND_STATUS_BAR //允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序(Allows an application to expand or collapse the status bar. ) android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户(Run as a manufacturer test application, running as the root user. ) android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯(Allows access to the flashlight ) android.permission.FORCE_BACK //允许程序强行一个后退操作是否在顶层activities(Allows an application to force a BACK operation on whatever is the top activity. ) android.permission.FOTA_UPDATE 暂时不了解这是做什么使用的,android开发网分析可能是一个预留权限. android.permission.GET_ACCOUNTS 访问一个帐户列表在Accounts Service中(Allows access to the list of accounts in the Accounts Service) android.permission.GET_PACKAGE_SIZE //允许一个程序获取任何package占用空间容量(Allows an application to find out the space used by any package. ) android.permission.GET_TASKS //允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等(Allows an application to get information about the currently or recently running tasks: a thumbnail representation of the tasks, what activities are running in it, etc.) android.permission.HARDWARE_TEST //允许访问硬件(Allows access to hardware peripherals. ) android.permission.INJECT_EVENTS //允许一个程序截获用户事件如按键、触摸、轨迹球等等到一个时间流,android 开发网提醒算是hook技术吧(Allows an application to inject user events (keys, touch, trackball) into the event stream and deliver them to ANY window.) android.permission.INSTALL_PACKAGES //允许一个程序安装packages(Allows an application to install packages. ) android.permission.INTERNAL_SYSTEM_WINDOW //允许打开窗口使用系统用户界面(Allows an application to open windows that are for use by parts of the system user interface. ) android.permission.INTERNET //允许程序打开网络套接字(Allows applications to open network sockets) android.permission.MANAGE_APP_TOKENS //允许程序管理(创建、催后、 z- order默认向z轴推移)程序引用在窗口管理器中(Allows an application to manage (create, destroy, Z-order) application tokens in the window manager. ) android.permission.MASTER_CLEAR 目前还没有明确的解释,android开发网分析可能是清除一切数据,类似硬格机 android.permission.MODIFY_AUDIO_SETTINGS //允许程序修改全局音频设置(Allows an application to modify global audio settings) android.permission.MODIFY_PHONE_STATE //允许修改话机状态,如电源,人机接口等(Allows modification of the telephony state – power on, mmi, etc. ) android.permission.MOUNT_UNMOUNT_FILESYSTEMS //允许挂载和反挂载文件系统可移动存储(Allows mounting and unmounting file systems for removable storage. ) android.permission.PERSISTENT_ACTIVITY //允许一个程序设置他的activities显示(Allow an application to make its activities persistent. ) android.permission.PROCESS_OUTGOING_CALLS //允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls) android.permission.READ_CALENDAR //允许程序读取用户日历数据(Allows an application to read the user’s calendar data.) android.permission.READ_CONTACTS //允许程序读取用户联系人数据(Allows an application to read the user’s contacts data.) android.permission.READ_FRAME_BUFFER //允许程序屏幕波或和更多常规的访问帧缓冲数据(Allows an application to take screen shots and more generally get access to the frame buffer data) android.permission.READ_INPUT_STATE //允许程序返回当前按键状态(Allows an application to retrieve the current state of keys and switches. ) android.permission.READ_LOGS //允许程序读取底层系统日志文件(Allows an application to read the low-level system log files. ) android.permission.READ_OWNER_DATA //允许程序读取所有者数据(Allows an application to read the owner’s data) android.permission.READ_SMS //允许程序读取短信息(Allows an application to read SMS messages.) android.permission.READ_SYNC_SETTINGS //允许程序读取同步设置(Allows applications to read the sync settings) android.permission.READ_SYNC_STATS //允许程序读取同步状态(Allows applications to read the sync stats) android.permission.REBOOT 请求能够重新启动设备(Required to be able to reboot the device. ) android.permission.RECEIVE_BOOT_COMPLETED //允许一个程序接收到 ACTION_BOOT_COMPLETED广播在系统完成启动(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. ) android.permission.RECEIVE_MMS //允许一个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. ) android.permission.RECEIVE_SMS //允许程序监控一个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.) android.permission.RECEIVE_WAP_PUSH //允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming WAP push messages. ) android.permission.RECORD_AUDIO //允许程序录制音频(Allows an application to record audio) android.permission.REORDER_TASKS //允许程序改变Z轴排列任务(Allows an application to change the Z-order of tasks) android.permission.RESTART_PACKAGES //允许程序重新启动其他程序(Allows an application to restart other applications) android.permission.SEND_SMS //允许程序发送SMS短信(Allows an application to send SMS messages) android.permission.SET_ACTIVITY_WATCHER //允许程序监控或控制activities已经启动全局系统中(Allows an application to watch and control how activities are started globally in the system.) android.permission.SET_ALWAYS_FINISH //允许程序控制是否活动间接完成在处于后台时(Allows an application to control whether activities are immediately finished when put in the background.) android.permission.SET_ANIMATION_SCALE 修改全局信息比例(Modify the global animation scaling factor.) android.permission.SET_DEBUG_APP 配置一个程序用于调试(Configure an application for debugging.) android.permission.SET_ORIENTATION //允许底层访问设置屏幕方向和实际旋转(Allows low-level access to setting the orientation (actually rotation) of the screen.) android.permission.SET_PREFERRED_APPLICATIONS //允许一个程序修改列表参数PackageManager.addPackageToPreferred()和 PackageManager.removePackageFromPreferred()方法(Allows an application to modify the list of preferred applications with the PackageManager.addPackageToPreferred() and PackageManager.removePackageFromPreferred() methods.) android.permission.SET_PROCESS_FOREGROUND //允许程序当前运行程序强行到前台(Allows an application to force any currently running process to be in the foreground.) android.permission.SET_PROCESS_LIMIT //允许设置最大的运行进程数量(Allows an application to set the maximum number of (not needed) application processes that can be running. ) android.permission.SET_TIME_ZONE //允许程序设置时间区域(Allows applications to set the system time zone) android.permission.SET_WALLPAPER //允许程序设置壁纸(Allows applications to set the wallpaper ) android.permission.SET_WALLPAPER_HINTS //允许程序设置壁纸hits(Allows applications to set the wallpaper hints) android.permission.SIGNAL_PERSISTENT_PROCESSES //允许程序请求发送信号到所有显示的进程中(Allow an application to request that a signal be sent to all persistent processes) android.permission.STATUS_BAR //允许程序打开、关闭或禁用状态栏及图标Allows an application to open, close, or disable the status bar and its icons. android.permission.SUBSCRIBED_FEEDS_READ //允许一个程序访问订阅RSS Feed内容提供(Allows an application to allow access the subscribed feeds ContentProvider. ) android.permission.SUBSCRIBED_FEEDS_WRITE 系统暂时保留改设置,android开发网认为未来版本会加入该功能。 android.permission.SYSTEM_ALERT_WINDOW //允许一个程序打开窗口使用 TYPE_SYSTEM_ALERT,显示在其他所有程序的顶层(Allows an application to open windows using the type TYPE_SYSTEM_ALERT, shown on top of all other applications. ) android.permission.VIBRATE //允许访问振动设备(Allows access to the vibrator) android.permission.WAKE_LOCK //允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失( Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming) android.permission.WRITE_APN_SETTINGS //允许程序写入API设置(Allows applications to write the apn settings) android.permission.WRITE_CALENDAR //允许一个程序写入但不读取用户日历数据(Allows an application to write (but not read) the user’s calendar data. ) android.permission.WRITE_CONTACTS //允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user’s contacts data. ) android.permission.WRITE_GSERVICES //允许程序修改Google服务地图(Allows an application to modify the Google service map. ) android.permission.WRITE_OWNER_DATA //允许一个程序写入但不读取所有者数据(Allows an application to write (but not read) the owner’s data.) android.permission.WRITE_SETTINGS //允许程序读取或写入系统设置(Allows an application to read or write the system settings. ) android.permission.WRITE_SMS //允许程序写短信(Allows an application to write SMS messages) android.permission.WRITE_SYNC_SETTINGS //允许程序写入同步设置(Allows applications to write the sync settings) 

 

自定义权限设置:

Android 自定义权限 (<permission> <uses-permission>)