当前位置:文档之家› Android应用程序的自动更新升级

Android应用程序的自动更新升级

Android应用程序的自动更新升级
Android应用程序的自动更新升级

Android应用程序的自动更新升级(自身升级、通过tomcat)

刚入手android一个多月,因公司需要提交技术文档,才写了这个demo测试,想保存下来,以备后用!有什么不对的地方欢迎大家指正,这个示例也是参考了网上别人的demo自己做的。

Android应用程序的升级(自身升级)

一、引言:

很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了Linux系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们开发人员利用Android自带的API就可以实现。

二、功能说明:

1、本示例用来实现单个应用程序的自身升级

2、程序启动时,连接tomcat7 web服务器进行版本的检测,若有新版本则提示更新

3、将从web服务器下载的新版本的APK文件放到sdcard中

4、监听新版本的APK应用是否安装完成,如果是,则将下载的apk文件从sdcard中删除

三、程序框架流程:

四、环境说明:

1、服务器端:Ubuntu下的tomcat7web服务器,安装后默认端口是8080,Android模拟器访问时要将apk文件放到/var/lib/tomcat7/webapps/ROOT/目录下,Android模拟器的访问方式是http://10.0.2.2/NewAppSample.apk

2、Android模拟器端的开发环境:

Ubuntu+eclipse+ADT

五、流程详解及关键点说明:

(一) 新版本的应用程序(NewAppSample)准备:

a) 新建一个android工程,编辑其版本代码为2,高于我们的旧版本用于更新测试,版本名称为1.0.1

b) 编辑应用程序对应的版本信息文件version.json

说明:后缀为json的文件是一种轻量级的数据交换格式,比xml要快很多,适合于小型数据的网络交换,其实质类似键值对,键用字符串的形式表示与其值用冒号隔开,能存储多种数据类型。

(二) 旧版本的应用程序准备:

1、在其AndroidManifest.xml中定义版本代码为versionCode=”1”让其自动生成即可,我们主要利用程序的版本代码的高低来判断是否有新的版本,用于更新。

2、我们在应用程序启动时自动联网检测是否有新的版本,即在onCreate()函数中进行联网检测。

a) 从服务器获得读取版本信息文件version.json,我们单独写了一个类来实现,用其GetUpdateInfo静态方法来返回读取的version.json,返回形式是字符串。代码如下

b) 获得当前旧的应用程序版本信息,我们单独封装了一个类CurrentVersion,用其中的静态方法来获得当前应用的版本信息,包括程序的名称版本,代码版本,和应用程序名字。代码如下:

c) 将从服务器version.json获得的字符串解析出我们需要的版本信息

d) 进行代码版本的比较,提示是否更新当前的应用。

(三) 显示更新提示框

(四) 下载新的APK文件

下载完成时要将进度条对话框取消并进行是否安装新应用的提示

(五) 安装新的应用:

Intent的setDataAndType的一个参数是应用程序的绝对路径(在sdcard中),第二个参数是文件对应的MIME类型,android系统中的APK文件默认为

application/vnd.android.package-archive,该文件的MIME类型在tomcat服务器中的

/var/lib/tomcat7/conf文件中有对应。

(六) 网络检测代码和sdcard中APK文件的删除

关键说明:若不用广播接收的方式,直接在安装后的代码中实现删除下载的APK文件的话,会出现还没安装完成就把APK文件删除了的情况。在进入安装新的APK文件时会进入系统的提示进行一步一步的安装操作,所以我们无法判断应用程序什么时候完全安装完成。我们用监听(应用程序安装或替换的)广播的方式来实现,当接受到应用程序有ADDED 或则REPLACED的广播时我们再执行APK文件的删除操作。

六、Demo效果图例:

1.提示更新

2.下载新版本的应用

3.提示是否安装

4.进入系统安装提示

5.正在安装

6.安装完成

7.打开新版本的应用

七、完成过程中出现的问题以及关键点说明:

1. Android模拟器连接tomcat7服务器下载时访问地址IP不能用localhost,因为android 模拟器把localhost当成自己了,应该用10.0.

2.2测试

2. 下载的APK文件和版本信息的json文件应该放在/var/lib/tomcat7/webapps/ROOT/目录下不然无法访问到。

3. JSON文件的解析方式参考JSON附文理解。

4. 示例中涉及到的权限:

a) 与sdcard相关的权限:示例中我们需要在sdcard中创建和删除文件的权限和sdcard 的读写权限。

b) 与网络相关的权限:示例中我们需要访问网络的权限和获得网络状态的权限(测试网络是否可用),示例中我们只测试了网络是否可用,我们还可以添加网络是否已经连接的进一步判断。

5. 监听应用程序是否安装完成

在工程的Manifest.xml文件中添加要接受的广播action,这里我们监听应用程序本身的替换和系统中应用程序的添加两个action,应用程序的替换监听好像只能监听自身被替换,这一点待考察。

源码下载地址:本篇源码下载

八、JSON附文:

JSON的定义:

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可

以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C

语言体系的行为。

为什么用JSON?

很简单,因为它比xml快十倍。

有哪些应用案例?

Twitter、豆瓣、facebook等公司的开放api,一般这些服务都会提供多种格式供开发

人员选择(xml、json、atom等),而在手机终端上,我们自然希望给用户最佳体验,所以我选用最有效率的json格式。

JSON的结构:

Name/ValuePairs 类似所熟知的Keyedlist、Hash table、Disctionary和Associative array。在Android平台中同时存在另外一个类“Bundle”,某种程度上具有相似的行为。org.json.JSONObject Array,一组有序的数据列表。

Android中 JSON相关的类(4个)和Exceptions(1个):

l JSONArray

l JSONObject

l JSONStringer

l JSONTokener

l JSONException

JSONObject:

这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External:应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的Key和Value被冒号":"分隔)。其对于内部(Internal)

行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:newJSONObject().put("JSON", "Hello, World!"),在Key和Value之间是以逗号","分隔。Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

有两个不同的取值方法:

get(): 在确定数值存在的条件下使用,否则当无法检索到相关Key时,将会抛出一个Exception信息。

opt(): 这个方法相对比较灵活,当无法获取所指定数值时,将会返回一个默认数值,并不会抛出异常。

JSONArray:

它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为,get()和opt()两种方法都可以通过index 索引返回指定的数值,put()方法用来添加或者替换数值。

同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String 或者默认值JSONObject.NULL object。

JSONStringer:

根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。根据下边的实例来了解其它相关信息:

stringmyString= new JSONStringer().object()

.key("AR").value("https://www.doczj.com/doc/044090258.html,!")

.endObject()

.toString();

结果是一组标准格式的JSON text:{”AR”:”https://www.doczj.com/doc/044090258.html,!”}

其中的.object()和.endObject()必须同时使用,是为了按照Object标准给数值添加边界。同样,针对数组也有一组标准的方法来生成边界.array()和.endArray()。

JSONTokener:

这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。

JSONException:

是https://www.doczj.com/doc/044090258.html,类抛出的异常信息。

Android布局属性大全

Android布局属性大全 布局: AbsoluteLayout(绝对布局): xmlns:android="https://www.doczj.com/doc/044090258.html,/apk/res/android" style="@..." android:clipChildren="true|false" android:clipToPadding="true|false" android:layoutAnimation="@---" android:animationCache="true|false" android:persistentDrawingCache="none|animation|scrolling|all":持续高速缓存绘图 android:alwaysDrawnWithCache="true|false" android:andStatesFromChildre="true|false" android:descendantFocusability="beforeDescendants|afterDescendants|bl ocksDescendants":后裔可聚焦 android:id="@+id/absoluteLayout" android:tag="@---" android:android:scrollX="---" android:android:scrollY="---" android:background="@---" android:padding="----" android:paddingLeft="----" android:paddingTop="----" android:paddingRight="----" android:paddingBotton="---" android:focusable="true|false" android:focusableInTouchMode="true|false" android:visibility="visible|invisible|gone" android:fitsSystemWindows="true|false":适合系统窗口 android:scrollbars="none|horizontal|vertical" android:scrollbarStyle="insideOverlay(内覆盖)|insideInset(内插 图)|outsideOverlay(外覆盖)|outsideInset(外插图)" android:isScrollContainer="true|false":是一个滚动集合 android:fadeScrollbars="true|false":褪色的滚动条 android:scrollbarFadeDuration="---":卷轴淡出 android:scrollDefaultDelayBeforeFade="---":滚动前默认延迟 android:scrollbarSize="---" android:scrollbarThumbHorizontal="@----":拇指水平滚动条 android:scrollbarThumbVertical="@----":拇指垂直滚动条 android:scrollbarTrackVertical="@---":垂直滚动条轨道 android:scrollbarTrackHorizontal="@---":水平滚动条轨道 android:scrollbarAlwaysDrawHorizontalTrack="true|false":水平滚动条总是吸引轨道

Android之TextView属性大全

Android之TextView属性大全 发现TextView有一个比较大的问题,就是文字排版的问题,遇到数字,字母,符号等就会有问题,目前还没有什么解决方法。 android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。 android:bufferType指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符, 也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式. android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。 android:cursorVisible设定光标为显示/隐藏,默认显示。 android:digits设置允许输入哪些字符。如“1234567890.+-*/% ()” android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。 android:drawableLeft在text的左边输出一个drawable 。 android:drawablePadding设置text与drawable(图片)的间隔,与drawableLeft、drawableRight、drawableTop、drawableBottom一起使用,可设置为负数,单独使用没有效果。 android:drawableRight在text的右边输出一个drawable。

Android应用开发基础习题集

任务一 Android开发环境的搭建 第一部分知识回顾与思考 1.Android的四层架构分别包括哪几层分别起到什么作用 答:Linux内核层(Linux Kernel):基于Linux内核,内核为上层系统提供了系统服务。 系统库层(Libraries):系统库基于C/C++语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework):为开发者提供了一系列的Java API,包括图形用户界面组件View、SQLite数据库相关的API、Service组件等。 应用程序层(Applications):包含了Android平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android四层架构中,应用框架层使用的是什么语法( C ) A.C B.C++ C.Java D.Android 2.Android四层架构中,系统库层使用的是什么语法( B ) A.VB B.C /C++ C.Java D.Android 3.应用程序员编写的Android应用程序,主要是调用( B )提供的接口进行实现。 A.应用程序层 B.应用框架层 C.应用视图层 D.系统库层 二、填空题(请在括号内填空) 1.在Android智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android的(应用程序)层。 2.为了让程序员更加方便的运行调试程序,Android提供了(模拟器),可以方便的将程序运行其上,而不要实际的移动终端。 3.为了支持Java程序运行,我们需要安装(JDK)。 三、简答题 1.简述Android开发环境安装的步骤。 答:下载并安装JDK,配置JDK的环境变量; 从Anroid官网上下载Android开发组件(包含Eclipse和Android SDK、ADT); 安装Android开发环境(包括配置Android SDK的环境变量、打开Eclipse通过菜单设定Android SDK 路径)。 2.简述Android应用程序创建和运行的步骤。 答:通过菜单创建Android应用程序,设置应用程序名、Android版本等基本信息。

Android开发-UI属性

android:fadingEdgeLength 设置淡入淡出边缘的长度,可以接受大小值的单位是:px、dp、sp、in、mm,也可以参考大小值资源 android:fitsSystemWindows 是否适合系统窗体,取值为true或false。该属性只对不是子组件的组件有效 android:focusable 是否可以获取焦点,取值true或false android:focusableInTouchMode 是否可以在触摸模式下获取焦点,true或false android:hapticFeedbackEnabled 是否允许触摸反馈效果,true或false android:id 提供该组件的标识名,可以借助Activity或View实例的findViewById方法通过id获取对应的组件实例对象,其属性值的形式为:android:id=”@+id/id” android:isScrollContainer 设置该组件是否设置为滚动条容器,true或false android:keepScreenOn 控制该组件在显示的时候保持在屏幕显示,true或false android:longClickable 是否响应长时间点击事件,true或false android:minHeight 组件的最小高度,取值同android:fadingEdgeLength android:minWidth 组件的最小宽度,取值同android:fadingEdgeLength android:nextFocusDown 设置下一个向下获取焦点的组件,取值为id android:nextFocusLeft 设置下一个向左获取焦点的组件,取值为id android:nextFocusRight 设置下一个向右获取焦点的组件,取值为id android:nextFocusUp 设置下一个向上获取焦点的组件,取值为id android:padding 设置上、下、左、右4个边缘的填充距离,必须是一个大小值,取值同android:fadingEdgeLength android:paddingBottom 设置下端边缘的填充距离,取值同android:padding android:paddingLeft 设置左端边缘的填充距离,取值同android:padding android:paddingRight 设置右端边缘的填充距离,取值同android:padding android:paddingTop 设置上端边缘的填充距离,取值同android:padding android:saveEnabled 是否允许保存状态,取值为true或false android:scrollX 设置垂直滚动条的位移量,必须是一个大小值,取值同android:padding android:scrollY 设置水平滚动条的位移量,必须是一个大小值,取值同android:padding android:scrollbarAlwaysDrawHorizontalTrack 是否总是设置水平滚动条滑块,true或false android:scrollbarAlwaysDrawVerticalTrack 是否总是设置垂直滚动条滑块,true或false android:scrollbarSize 设置垂直滚动条的宽度和水平滚动条的长度,必须是一个大小值,取值同android:padding android:scrollbarStyle 设置滚动条的样式,取值为下列之一:insideOverlay在填充区域内,覆盖形式insideInset在填充区域内,插进形式(凹进)outsideOverly在绑定组件边缘,覆盖形式outsideInset在绑定组件边缘,插进形似 android:scrollbarThumbHorizontal 设置水平滚动条按钮的绘制资源,必须引用可绘制资源 android:scrollbarThumbVertical 设置垂直滚动条按钮的绘制资源,必须引用可绘制资源

Android属性服务

Android属性服务 Windows平台上有有一个叫注册表的东西。注册表可以存储一些键值对。一般而言,系统或某些应用程序会把自己的一些属性存储在注册表中,即使系统重启或应用程序重启,它还能够根据之前在注册表中设置的属性,进行相应的初始化工作。Android平台也提供了一个类似的机制,称之为属性服务(property service)。应用程序可通过这个属性机制,查询或设置属性。 可以通过adb shell登陆到真机,使用getprop命令查看当前系统中有哪些属性。 如下是登陆到FTS920查看到的相关属性值: [localhost@/]# getprop getprop [ro.secure]: [0] [ro.allow.mock.location]: [1] [ro.debuggable]: [1] [persist.service.adb.enable]: [1] [ro.factorytest]: [0] [ro.serialno]: [] [ro.bootmode]: [unknown] [ro.baseband]: [unknown] [ro.carrier]: [unknown] [ro.bootloader]: [unknown] [ro.hardware]: [pxa910-based] [ro.revision]: [0] [ro.product.model]: [FTS920] [https://www.doczj.com/doc/044090258.html,]: [FTS920] [ro.product.device]: [FTS920] [ro.product.board]: [FTS920] [dalvik.vm.heapsize]: [36m] [dalvik.vm.jniopts]: [warnonly] [ro.opengles.version]: [131072] …… 在init.c文件的main函数中,先后调用了3处跟属性服务相关的操作: 1. 2. 3.

Android手机开发环境配置详细说明书(doc 10页)

一,配置前需要下载的文件 1,jdk 6:https://www.doczj.com/doc/044090258.html,/javase/downloads/index.jsp 说明:原则上下载最新的。本阶段下载的是第一个:JDK 6 Update 16 with Java EE Eclipse 3.5(galileo):https://www.doczj.com/doc/044090258.html,/downloads/数量间的联系。 说明:原则上下载最新的。本阶段下载的是第一个:Eclipse IDE for Java EE Developers (189 MB) Android SDK:https://www.doczj.com/doc/044090258.html,/bbs/viewthread.php?tid=10147&highlight=sdk冲钻然 说明:只需安装SDK,ADT不用下。 二,软件安装 jdk 6的安装:下载下来后,解压缩,安装exe文件。按步骤进行。 Eclipse 3.5:解压缩后即可。假设解压缩路径为e盘根目录即:E:\eclipse Android SDK:解压缩即可。假设解压缩路径为e盘根目录即:E:\ android-sdk-windows-1.5_r2 三,环境变量 设置Android SDK环境变量:我的电脑右键->属性->高级->环境变量。在其中找到Path并进行编辑。在变量值最后增加如下代码 ; E:\ android-sdk-windows-1.5_r2\tools 说明:前面的”;”为英文状态下的”;”另外,E:\ android-sdk-windows-1.5_r2\tools不一定是你自己的tools路径。实际而言可能是这个路径E:\ android-sdk-windows-1.5_r2\ android-sdk-windows-1.5_r2\tools 四,安装Android Development Tools plug-in 1,打开Eclipse 3.5,选择Help->Install New Software 之后在work with的文本框输入https://https://www.doczj.com/doc/044090258.html,/android/eclipse/并回车,会在其下显示出Developer Tools,全部选择后,next。

Android系统外文翻译3

Android起航 译 使用XML进行布局 虽然纯粹通过Java代码在activity上创建和添加部件,在技术上是可行的,我们在第4章中做的一样,更常见的方法是使用一种基于XML的布局文件。动态的小部件实例保留更多,情况复杂,小工具在编译时不为人所知(例如,在数据检索了互联网基础上将单选按钮填充柱。 考虑到这一点,现在是时候打破XML来学习如何用此种方式来布置Android activities。 什么是基于XML的布局? 正如其名称所示,一个基于XML的布局是一个关系到每个规格的小部件,和他们的容器(更多关于此内容的在第7章)编码的XML格式。具体来说,Android 认为基于XML的布局是资源,因此布局文件存储在res /在你的Android项目布局目录中。 每个XML文件包含一个指定的部件和容器布局元素树,一种意见认为构成层次。对XML元素的属性,描述一个部件应如何看或者一个容器应如何运转。例如,如果一个按钮元素。 有一个Android的属性值:文字样式=“bold”,这意味着该文本出现在按钮的表面应该是呈现一个粗体字体样式. Android的SDK中附带一个使用的布局的工具(aapt)。这个工具应自动调用你的Android工具链(例如,Eclipse中,Ant’s build.xml)。作为一个开发人员,尤其重要的是,在您的项目中aapt生成R.java源文件,让您能在那些布局中直接从Java代码中获取布局和部件。 为什么使用基于XML的布局? 使用XML布局文件做的大部分都可以通过Java代码。例如,你可以使用setTypeface()命令一个按钮使用粗体文本,而不是在一个XML布局中使用属性。由于XML布局是为你跟踪的另一个文件,所以我们需要好的理由来使用这样的文

Android实现获取系统应用列表

Android实现获取系统应用列表 本文介绍在Android中如何获取系统应用程序列表。 Android系统为我们提供了很多服务管理的类,包括ActivityManager、PowerManager(电源管理)、AudioManager(音频管理) 等。除此之外,还提供了一个PackageManger管理类,它的主要职责是管理应用程序包。通过它,我们就可以获取应用程序信息。 PackageManager的功能: ?安装,卸载应用 ?查询permission相关信息 ?查询Application相关信息(application,activity,receiver,service,provider及相应属性等)?查询已安装应用 ?增加,删除permission ?清除用户数据、缓存,代码段等 我们可以用PackageManager来显示系统安装的应用程序列表或者系统程序列表 相关类的介绍 PackageItemInfo类 说明:AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、meta-data。它并不直接使用,而是由子类继承然后调用相应方法。 常用字段: public int icon 获得该资源图片在R文件中的值(对应于android:icon属性) public int labelRes 获得该label在R文件中的值(对应于android:label属性) public String name 获得该节点的name值(对应于android:name属性) public String packagename 获得该应用程序的包名(对应于android:packagename属性) 常用方法: Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像 CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label

【推荐下载】Android中的android.provider.Settings.System系统属性设定

Android 中的android.provider.Settings.System 系统属性设定2012/04/12 0 Content Provider 中的Setting.System 表内存储了很多系统属性的,以键对的形式存在! 可以对如下的变量进行设置 ConstantsStringACCELEROMETER_ROTATIONControl whether the accelerometer will be used to change screen orientation.StringADB_ENABLEDThis constant is deprecated. Use ADB_ENABLED insteadStringAIRPLANE_MODE_ONWhether Airplane Mode is on.StringAIRPLANE_MODE_RADIOSA comma separated list of radios that need to be disabled when airplane mode is on.StringALARM_ALERTPersistent store for the system-wide default alarm alert.StringALWAYS_FINISH_ACTIVITIESIf 1, the activity manager will aggressively finish activities and processes as soon as they are no longer needed.StringANDROID_IDThis constant is deprecated. Use ANDROID_ID insteadStringAPPEND_FOR_LAST_AUDIBLEAppended to various volume related settings to record the previous values before they the settings were affected by a silent/vibrate ringer mode change.StringAUTO_TIMEValue to specify if the user prefers the date, time and time zone to be automatically fetched from the network (NITZ).StringAUTO_TIME_ZONEValue to specify if the user prefers the time zone to be automatically fetched from the network (NITZ).StringBLUETOOTH_DISCOVERABILITYDetermines whether remote devices may discover and/or connect to this device.StringBLUETOOTH_DISCOVERABILITY_TIMEOUTBluetooth discoverability timeout.StringBLUETOOTH_ONThis constant is deprecated. Use BLUETOOTH_ON insteadStringDATA_ROAMINGThis constant is deprecated. Use DATA_ROAMING insteadStringDATE_FORMATDate format string mm/dd/yyyy dd/mm/yyyy yyyy/mm/ddStringDEBUG_APPName of an application package to be

android系统属性

Android的属性系统 2011-04-10 17:42 每个属性都有一个名称和值,他们都是字符串格式。属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性。 在系统初始化时,Android将分配一个共享内存区来存储的属性。这些是由“init”守护进程完成的,其源代码位于:device/system/init。“init”守护进程将启动一个属性服务。属性服务在“init”守护进程中运行。每一个客户端想要设置属性时,必须连接属性服务,再向其发送信息。属性服务将会在共享内存区中修改和创建属性。任何客户端想获得属性信息,可以从共享内存直接读取。这提高了读取性能。 客户端应用程序可以调用libcutils中的API函数以GET/SET属性信息。libcutils的源代码位于:device/libs/cutils。API函数是: int property_get(const char *key, char *value, const char *default_value); int property_set(const char *key, const char *value); 而libcutils又调用libc中的__system_property_xxx 函数获得共享内存中的属性。libc的源代码位于: device/system/bionic。 属性服务调用libc中的__system_property_init函数来初始化属性系统的共享内存。当启动属性服务时,将从以下文件中加载默认属性: / default.prop /system/build.prop /system/default.prop /data/local.prop 属性将会以上述顺序加载。后加载的属性将覆盖原先的值。这些属性加载之后,最后加载的属性会被保持在 /data/property中。 特别属性 如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。 如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。 如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。(这是很巧妙的。netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。) 属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中。客户端应用程序可以轮询那个属性值,以确定结果。 Android toolbox程序 Android toolbox程序提供了两个工具:setprop和getprop获取和设置属性。其使用方法: getprop <属性名> setprop <属性名><<属性值> Java 在Java应用程序可以使用System.getProperty()和System.setProperty()函数获取和设置属性。 Action 默认情况下,设置属性只会使"init"守护程序写入共享内存,它不会执行任何脚本或二进制程序。但是,您可以将您的想要的实现的操作与init.rc中某个属性的变化相关联.例如,在默认的init.rc中有:

Android系统应用开发作业1

Android系统应用开发作业1 单项选择题 第1题关于主题的说法,不正确的是 A、它是属性集合 B、它可以在程序中来设置 C、它通常用于一个Activity或所有Activity上 D、它可以用于单个TextView上 答案:D 第2题下列说法不正确的是 A、javac.exe 能指定编译结果要置于哪个目录(directory)? B、在编译程序时,所能指定的环境变量不包括class path? C、javac 一次可同时编译数个java 源文件 D、环境变量可在编译source code时指定 答案:D 第3题如果希望自定义TabHost标题部分的显示内容需要使用下列哪个方法() A、tabHost.addTab(tabHost.newTabSpec("tab1") B、setIndicator() C、setContent() D、setView 答案:B 第4题对一些资源以及状态的操作保存,最好是保存在Activity生命周期的哪个函数中进行? A、onStart( ) B、onPause( ) C、onCreate( ) D、onResume( ) 答案:A 第5题继承了Canvas类必须实现的方法是() A、paint() B、keyPressed() C、run() D、main() 答案:A 第6题下列关于XML布局文件在Java代码中被引用的说明中,不正确的是? A、在Activity中,可以使用findViewById( )方法,通过资源id,获得指定视图元素 B、在Activity中,可以使用R.drawable-system.***方式引用Android系统所提供的图片资源 C、在Activity中,可以使用setContentView( )方法,确定加载哪一个布局文件

android系统之属性系统详解

android系统之属性系统详解 1 属性系统概述 (2) 2 property数据的编译 (3) 2.1 /default.prop (3) 2.2 /system/build.prop (4) 2.3 其他属性文件 (8) 3 property的相关实现代码和流程 (9) 3.1 property服务端解析 (10) 3.1.1 Server端代码流程 (10) 3.1.1.1 init.c下的整体流程 (10) 3.1.1.2 创建共享内存区域 (10) 3.1.1.3加载根目录下的default.prop (15) 3.1.1.4加载其余4个属性文件的全部属性,并启动socket监听 (16) 3.1.1.5 property触发器执行函数加入队列 (18) 3.1.1.6 执行队列中的property任务 (19) 3.1.1.7 将property的监听socket加入待检查的socket数组 (20) 3.1.1.8 检查上层有哪些端口连接请求 (20) 3.1.1.9 property设置的响应 (20) 3.1.2 详解server端的property_set (25) 3.1.2.2 find_property (26) 3.1.2.3 prop数据二叉树存取解析 (29) 3.1.2.4 __system_property_update (30) 3.1.2.5 __system_property_add (30) 3.1.2.6 write_persistent_property (30) 3.1.2.7 property_changed (31) 3.2 property系统桥梁 (31) 3.2.1 __system_property_set (32) 3.2.2__system_property_set (33) 3.3 property客户端解析 (34) 3.3.1 客户端C层访问属性系统 (34) 3.3.2 客户端shell命令访问 (35) 3.3.3 客户端java层访问 (36) 4总结 (37) 附录一:《GCC的constructor》 (37)

Android布局属性(DOC)

1、可以使某些资源文件或UI组件可重用 按Ctrl+1键 2、定义一个文本编辑框,使用 绝对定位 android:layout_x="20dip" android:layout_y="80dip" 3、控件位置 3.1布局属性详解 RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:layout_alignParentRight 贴紧父元素的右边缘 android:layout_alignParentTop 贴紧父元素的上边缘 android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物 第二类:属性值必须为id的引用名“@id/id-name” android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右边 android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐 android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐 android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐 android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

安卓系统属性

android系统属性build.prop,所在位置:out\target\product\kylin\system\build.prop 用数据线连接android 设置,进入调试模式(在android的设置--应用程序--开发--USB调试) 开始--运行--CMD C:\Documents and Settings\Administrator>adb shell # cd system cd system # ls ls app build.prop fonts lib usr bin etc framework media xbin 可以看到build.prop,这个就是系统的属性表,若要COPY出来,这样操作: 比如COPY到D盘的leo目录下 C:\Documents and Settings\Administrator>adb pull system/build.prop d://leo 120 KB/s (0 bytes in 1925.000s) C:\Documents and Settings\Administrator> 可用记事本打开查看 若要在java代码里读取里面的属性值,则需用到android.os.SystemProperties这个类,此类未开放(未提供给SDK API),

此类具体位置:frameworks\base\core\java\android\os\SystemProperties.java 能够在frameworks里面使用, 比如在所有文件policies\base\phone\com\android\internal\policy\impl\LockScreen.java 里使用final boolean isMonkey = SystemProperties.getBoolean("ro.monkey", false); 也能够在android自带的APP 里使用,比如在Settings app里使用 packages\apps\Settings\src\com\android\settings\deviceinfo\Status.java //leo added for KYLIN-529 if(SystemProperties.get("https://www.doczj.com/doc/044090258.html,").equals("surfone_citic"))

Android开发之深入理解Android 7.0系统权限更改相关文档

Android开发之深入理解Android 7.0系统权限更改相关文档 一、深入理解FileProvider FileProvider属于Android 7.0新增的一个类,该类位于v4包下,详情可见android.support.v4.content.FileProvider,使用方法类似与ContentProvider,简单概括为三个步骤,这里先以调用系统相机拍照并保存sdcard公共目录为例,演示使用过程: 在资源文件夹res/xml下新建file_provider.xml文件,文件声明权限请求的路径,代码如下: 在AndroidManifest.xml添加组件provider相关信息,类似组件activity,指定resource属性引用上一步创建的xml文件(后面会详细介绍各个属性的用法),代码如下: 最后一步,Java代码申请权限,使用新增的方法getUriForFile()和grantUriPermission(),代码如下(后面会详细介绍方法对应参数的使用): if (Build.VERSION.SDK_INT > 23) { /**Android 7.0以上的方式**/ Uri contentUri = getUriForFile(this, getString(R.string.install_apk_path), file); grantUriPermission(getPackageName(), contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri); } 修改build.gradle文件compileSdkVersion大于或等于24,targetSdkVersion等于24,使用Android 7.0模拟器运行Demo,效果图:

Android中Intent的简介以及属性的详解

Android中Intent的简介以及属性的详解 MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0 一.Intent的介绍 Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。 二.Inten启动组件的方法 Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。具体方法如下: 组件名称方法名称 Activity startActvity( ) startActivity( ) Service startService( ) bindService( ) Broadcasts sendBroadcasts( ) sendOrderedBroadcasts( ) sendStickyBroadcasts( ) 三.Intent的属性 Intent有以下几个属性: 动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。 1.Intent的Action属性 Action是指Intent要完成的动作,是一个字符串常量。SDK中定义了一些标准的Action常量如下表所示。 Constant Target com Action ponent ACTION_CALL activity Initiate a phone call. ACTION_EDIT activity Display data for the user to edit. ACTION_MAIN activity Start up as the initial activity of a task, with no dat a input and no returned output. ACTION_SYNC activity Synchronize data on a server with data on the mob ile device.

android布局属性_AbsoluteLayout(绝对布局)

AbsoluteLayout(绝对布局): xmlns:android="https://www.doczj.com/doc/044090258.html,/apk /res/android" style="@..." android:clipChildren="true|false" android:clipToPadding="true|false" android:layoutAnimation="@---" android:animationCache="true|false" android:persistentDrawingCache="none|animation |scrolling|all":持续高速缓存绘图 android:alwaysDrawnWithCache="true|false" android:andStatesFromChildre="true|false" android:descendantFocusability="beforeDescendan ts|afterDescendants|blocksDescendants":后裔可聚焦 android:id="@+id/absoluteLayout" android:tag="@---" android:android:scrollX="---" android:android:scrollY="---" android:background="@---" android:padding="----" android:paddingLeft="----"

android:paddingTop="----" android:paddingRight="----" android:paddingBotton="---" android:focusable="true|false" android:focusableInTouchMode="true|false" android:visibility="visible|invisible|gone" android:fitsSystemWindows="true|false":适合系统窗口 android:scrollbars="none|horizontal|vertical" android:scrollbarStyle="insideOverlay(内覆盖)|insideInset(内插图)|outsideOverlay(外覆盖)|outsideInset(外插图)" android:isScrollContainer="true|false":是一个滚动集合 android:fadeScrollbars="true|false":褪色的滚动条android:scrollbarFadeDuration="---":卷轴淡出android:scrollDefaultDelayBeforeFade="---":滚动前默认延迟 android:scrollbarSize="---" android:scrollbarThumbHorizontal="@----":拇指水平滚动条 android:scrollbarThumbVertical="@----":拇指垂直滚

相关主题
文本预览
相关文档 最新文档