Android NDK区分第一次起机-sqlite3 operation support

来源:互联网 发布:java小程序源码 编辑:程序博客网 时间:2024/05/16 05:54

在前文博客:Android——锁定launch - 原生Browser启动 -引导provision 以及Android——sqlite3 基本命令操作 中有分析到android 开机真正的启动apk及其标记位device_provisioned以及android database sqlite3的实际操作。
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/46506709本文来自 【jscese】的博客!

application层直接调用Setting类的静态类静态方法即可,native就需要自己添加:

添加支持:

android.mk中添加:

LOCAL_SHARED_LIBRARIES +=libsqlite

copy sqlite3自带的头文件:external/sqlite/dist/sqlite3.h

check操作:

直接贴实现代码:

/*====================db==cmd============================*/#define PROVISIONED_DB_NAME "/data/data/com.android.providers.settings/databases/settings.db"#define QUERY_DEVICE_PROVISIONED_CMD "select * from global where name='device_provisioned'"static int checkdeviceprovisioned() {    char acvalue[10] = {'\0'};    sqlite3 * sdb = 0;    if (sqlite3_open(PROVISIONED_DB_NAME, &sdb) != SQLITE_OK) {        ERROR("open error! : %s\n", sqlite3_errmsg(sdb));        goto error;    }    if (sqlite3_exec(sdb, QUERY_DEVICE_PROVISIONED_CMD, '''loaddbinfo''', &acvalue,            NULL) != SQLITE_OK) {        ERROR("select provisioned error\n");        goto error;    }    if (strcmp(acvalue, "1") != 0) {        ERROR("device_provisioned =0 :the device is not ready\n");        goto error;    }    sqlite3_close(sdb);    sdb = 0;    return 1;    error: sqlite3_close(sdb);    sdb = 0;    return -1;}

其中loaddbinfo为回调函数,&acvalue 传进去的数组名,作为数据载体。

/*settings.db-global table-format: ID|NAME|VALUE*//*CREATE TABLE global (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);*//*now get value*/int loaddbinfo( void * pbuffer, int icolumn, char ** pvalue, char ** pname ){    for( int iloop = 0 ; iloop < icolumn; iloop++ )    {        if((iloop==icolumn-1)&&(pbuffer != NULL))          {            strcpy((char *)pbuffer,pvalue[iloop]); //上面char类型array的,类型转换          }    }    return 0;}

简单方便~

1 0
原创粉丝点击