灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3341回复:0

android 属性系统使用

楼主#
更多 发布于:2012-09-25 14:37



这里说明一下具体使用场景及方法:




需求:有一个应用需要操作mtd flash,这是一层比较底级的接口操作,针对此类接口封装好了libmtd_flash.so,但是同时
碰到一个问题,应用对设备没有访问权限,多放查证增加了对sdcard的访问等还是不行,那么解决这个问题的方法就是两个:
1、在c++层做一个service,使用binder作为客户端联系桥梁
2、使用android自带的属性系统
从使用的场景及数据量,还是复杂度多方面考虑,决定采用属性系统共享数据




1、首先我们知道:
  Native代码
   当编写Native的程序时,可以使用property_get和property_set API来获得和设置属性。使用这两个API必须要包含头文件和链接libcutil库。
  java代码
   Android在Java库中提供System.getProperty和System.setProperty方法,我们Java程序可以通过他们来设置和获得属性。
  由于我们在native层编写代码,所以使用property_get和property_set即可
 
2、列一下属性系统的接口函数




/* property_get: returns the length of the value which will never be
** greater than PROPERTY_VALUE_MAX - 1 and will always be zero terminated.
** (the length does not include the terminating zero).
**
** If the property read fails or returns an empty value, the default
** value is used (if nonnull).
*/
int property_get(const char *key, char *value, const char *default_value);




/* property_set: returns 0 on success, < 0 on failure
*/
int property_set(const char *key, const char *value);




ok,没有什么初始化或者啥的函数,直接使用set、get即可,相当方便




3、实现使用
a、直接编译一个可执行后台进程运行
b、在些中读取和设定mtd flash中数据,比如open/read/write/erase等等操作,将其数据保存到内存中,对于
  只需要get的属性数据直接从内存中查找即可
c、对于write/erase等对flash中数据改写的操作,同步内存中数据及属性系统中数据即可
d、对于上层应用或其它进程需要访问相关数据直接利用property_get/property_set即可





优点:一个后台进程,服务于所有客户端并保持数据一致,最重要的解决了权限问题,因为由init启动的服务进程带有root权

喜欢0 评分0
游客

返回顶部