Android非mtk平台T9的实现
开发MTK平台的机器一般比较幸福,非常友好的支持(对比国外大厂),N多国内运营商的功能支持早有实现,比如T9。但是开发高大上的高通咋办?木有T9啊。不过目前有多种方案可选则。
实现mtk的sqlite方法
static void nativeRegisterCustomFunction(JNIEnv* env, jclass clazz, jlong connectionPtr,jobject functionObj) {...int err = sqlite3_create_function_v2(connection->db, name, numArgs, SQLITE_UTF16,reinterpret_cast<void*>(functionObjGlobal),&sqliteCustomFunctionCallback, NULL, NULL, &sqliteCustomFunctionDestructor);...
}
注册方法中使用sqlite3_create_function_v2方法注册custom方法,这个和C++代码的添加方式是基本一样的。
static void sqliteCustomFunctionCallback(sqlite3_context *context,int argc, sqlite3_value **argv) {JNIEnv* env = AndroidRuntime::getJNIEnv();// Get the callback function object.// Create a new local reference to it in case the callback tries to do something// dumb like unregister the function (thereby destroying the global ref) while it is running.jobject functionObjGlobal = reinterpret_cast<jobject>(sqlite3_user_data(context));jobject functionObj = env->NewLocalRef(functionObjGlobal);jobjectArray argsArray = env->NewObjectArray(argc, gStringClassInfo.clazz, NULL);if (argsArray) {for (int i = 0; i < argc; i++) {const jchar* arg = static_cast<const jchar*>(sqlite3_value_text16(argv[i]));if (!arg) {ALOGW("NULL argument in custom_function_callback. This should not happen.");} else {size_t argLen = sqlite3_value_bytes16(argv[i]) / sizeof(jchar);jstring argStr = env->NewString(arg, argLen);if (!argStr) {goto error; // out of memory error}env->SetObjectArrayElement(argsArray, i, argStr);env->DeleteLocalRef(argStr);}}// TODO: Support functions that return values.env->CallVoidMethod(functionObj,gSQLiteCustomFunctionClassInfo.dispatchCallback, argsArray);error:env->DeleteLocalRef(argsArray);}env->DeleteLocalRef(functionObj);if (env->ExceptionCheck()) {ALOGE("An exception was thrown by custom SQLite function.");LOGE_EX(env);env->ExceptionClear();}
}
上面是java层custom方法回调的代码,可以看出完全没有返回值的相关代码(sqlite中的返回值是通过sqlite3_result_int等方法返回的,并不是通过return语句,sqlite定义的custom方法返回值都是void)。这样java层的代码只能是干些无返回值的活,例如MediaProvider中是在删除数据库的时候删除对应项目的文件。
开源
handsomezhou
kewenya
oasisfeng
自己实现
Trie树
数据源的更新
数据源的保存
Android非mtk平台T9的实现相关推荐
- Android Q MTK平台开关机铃声
google 默认开机动画代码在framework/base/cmds/bootanimation MTK 开机动画代码在vendor/mediatek/proprietary/operator/fr ...
- Android 系统性能优化(57)---MTK 平台开关机、重启时间优化
MTK 平台开关机.重启时间优化 开关机.重启时间优化 开机性能优化:是用功能和其它因素多方面平衡的结果,片面追求单方面的性能没有太大意义: 有些产品设计开机动画非常酷炫,动画图片过多.高帧率 ...
- Android系统定制源码修改 - MTK平台
Android系统定制源码修改 - MTK平台 1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...
- mtk android 5.1 logo,Android ROM DIY之MTK平台手机通用移植
在之前的文章中,我们讨论过ROM刷机原理,修改ROM包以及如何让ROM包获取root权限.那么接下来,我们谈谈MTK平台手机ROM移植的话题.如果你是ROM小白,那么建议可以先看看之前的文章. ROM ...
- Android Camera (13)---MTK平台相机插值修改
MTK平台相机插值修改 一.注意事项 二.HAL层修改 三.APP层修改 四.部分插值整理 五.快速编译指令 一.注意事项 Camera插值在底层已经做好,我们只需要在中间层和app层添加一个对应的p ...
- Android 系统(159)----MTK 平台过CTA时,发生权限未明示问题
MTK 平台过CTA时,发生权限未明示问题 Background:CTA是针对中国大陆地区的一个安全认证,目的是提高移动智能终端自身的安全防护能力,防范移动智能终端上的各种安全威胁,避免用户的利益受到 ...
- Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数
Mtk平台 Android 打包解包*.img ,修改system.img 参数 MTK 升级包文件如下: 若存在软件版本号存在错误或需要修改,重新编译则需要几个小时,或者要几天的测试 若可以直接修改 ...
- Android 系统(112)---Android系统读取 CPU温度(MTK平台)
Android系统读取 CPU温度(MTK平台) 一.[MTK 平台]读取温度命令 1.查看类型是否是 CPU adb shell "cat /sys/class/thermal/therm ...
- Android 系统(86)---mtk平台上如何开启f2fs
本文介绍mtk平台上如何开启f2fs 1. MTK Android O1 SW 版本 2. F2FS 在下列平台已经做了验证,其他平台没有验证 1)6580/6570 2)6735/53/ ...
最新文章
- php pkcs 1格式的公钥,解说--2--微信支付RSA公钥PKCS1格式转化成PKCS8格式的公钥
- Android媒体播放框架MediaSessionCompat介绍实践
- 白话Elasticsearch61-进阶篇之基于Term Vectors深入探查数据的情况
- CEO 赠书 | 对失败的学习,决定了你成功的速度
- Extjs 动态生成表格
- EasyUI 分页 简洁代码
- 串口-TCP调试助手
- 阿里的数据同步神器——Canal
- 深度学习数据增强方法-内含(亮度增强,对比度增强,旋转图图像,翻转图像,仿射变化扩充图像,错切变化扩充图像,HSV数据增强)七种方式进行增强-每种扩充一张实现7倍扩)+ 图像缩放代码-批量
- 237. 删除链表中的节点 (Delete Node in a Linked List)
- 两年多工作心得和体会
- linux pv修改大小,Linux下扩容系统容量和删除unknown PV
- 【Windows】关于Windows Powershell找不到打不开修复方法
- 图扑数字孪生军演,构建跨域作战体系
- 微信会员注册开发【带源码】:网页授权,得到code后在当前页面获取openid,js+php实现跨域请求
- 2021-04-1 芯片74LS161使用总结
- python输入年月日输出年月日_【手把手教你】Python金融数据处理
- 批处理bat修改文件后缀
- SecureFX之激活教程
- 酷壳网大神重要文章转载合集