Android
1 需要提供给我们的信息
应用ID applicationId
, 例如 com.example.test
应用签名 (32个字符)
应用签名的MD5值 例如 4056245dffxxxxxxxxxxxx
2 获取配置信息
提供以上信息后,我们会按照这个信息,提供token
, 并提供一个aar
文件,请将这个文件放置于和app文件夹同级的libs
文件夹。并在app
的build.gradle
的dependencies
中增加如下配置:
implementation fileTree(include: ['*.aar'], dir: 'libs')
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.11.0"))
implementation("com.squareup.okhttp3:logging-interceptor")
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
implementation files('libs/judianopenapi-版本号.aar')
implementation('com.jdapi:jd-android-sdk-auth:版本号@aar') // 聚典授权工具库
使用SDK文件自带的demo直接测试前,请先:
-
确保签名一致性
1.1. 如您只有一个签名的情况下,请将app模块下的debug签名和release签名设置为release签名以方便测试
1.2. 如您有多个的签名情况下,请将app模块下的签名分别配置好相关信息
-
修改app的build.gradle文件中的applicationId
-
修改gradle.propertieS中的KEY_STORE_FILE(您app密钥路径)、KEY_STORE_PASSWORD、KEY_ALIAS、KEY_PASSWORD
-
修政sdkInit中的参数为您的token
3 代码编写
初始化
JuDianSearchManager.sdkInit("填入您的token",context)
获取书籍列表
返回结果中的fields对象中的数据,可作为按功能查询的可选配置项,例如:shiwen.danzi(释文-单字),shufa(书法),shici(诗词),传参格式:用逗号,隔开 查询结果的XML是加密数据,需下载字体再进行渲染
JuDianSearchManager.sdkGetBooks(object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 书籍列表结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})
按功能查询
查询结果的XML是加密数据,需下载字体再进行渲染
// ======== modulesParams 参数:功能 可选配置 ============
// 用,隔开 例:shiwen.danzi,shiwen.baike,shici(从书籍列表接口返回的结果 bookListBean.fields中获取key,作为自定义功能的参数)
// 不指定模块查询,传入 "" 默认查所有功能
JuDianSearchManager.sdkGetWordInfoByModules(editQuery.text.toString().trim(),
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 按功能查询结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
},modulesParams)
按书籍查询
查询结果的XML是加密数据,需下载字体再进行渲染
// ======== 从书籍查询 ============
// bookId:指定书籍查找词条直接传入bookId如:"98",指定多本书籍如:"98,3" 用,隔开;(书籍id从书籍列表接口中获取)
// 不指定书籍查询,传入 "" 默认全局查找
JuDianSearchManager.sdkGetWordByBook(editQuery.text.toString().trim(),
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 按书籍查询结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
}, "98,3"
)
根据词头模糊搜索
/**
* 根据词头模糊搜索
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInHeadword( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 词头模糊搜索结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})
}
模糊搜索释文
/**
* 模糊搜索释文
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInExplain( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 模糊搜索释文结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})
}
全文模糊搜索
/**
* 全文模糊搜索
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInFuzzy( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 全文模糊搜索结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})
}
弹框查询
使用示例:搜索‘中’一字,offsetY为显示框Y轴位置,
maxHeight
为显示框最大高度
/**
* 查词SDK弹框方法
* @param activity 页面Activity
* @param text 查询的文本
* @param offsetY 距离屏幕左上角的Y轴偏移量
* @param maxHeight 弹框最大高度
*/
JuDianSearchManager.sdkTextSearchDialog(this@MainActivity, editQuery.text.toString().trim(), 550, 800)
查询结果数据下载字体
downLoadFont(fontUrl)
/**
* 下载字体
* @param url
*/
private fun downLoadFont(url: String) {
// DownloadUtil 下载工具类Demo提供
DownloadUtil.get()!!.download(
url,
getRootExternalFilesDirs(this)!!.absolutePath,
"abc.tff",
object : DownloadUtil.OnDownloadListener {
override fun onDownloadSuccess(file: File?) {
Log.v("TAG", "下载成功啦")
Log.v("TAG ", file!!.absolutePath)
tf = Typeface.createFromFile(file)
if (file.absolutePath != null) {
filePath = file.absolutePath
}
// 渲染XML内容
showXMLWordContent()
}
override fun onDownloading(progress: Int) {
// Log.v("TAG", "下载进度" + progress);
}
override fun onDownloadFailed(e: Exception?) {}
})
}
private fun getRootExternalFilesDirs(context: Context): File? {
val files = ContextCompat.getExternalFilesDirs(context, null)
return if (files.isEmpty()) {
null
} else files[0]
}
XML数据渲染
/**
* 展示xml
*/
private fun showXMLWordContent() {
var xmParselStr: String? = ""
resultContentBean?.data?.shiwen?.danzi?.let {
// 单字 ParseXmlUtil工具类Demo中有提供
xmParselStr = ParseXmlUtil.getInstance().setWordXmlContent(it, filePath)
}
xmParselStr?.let {
setContent(xmParselStr!!)
}
}
private fun setContent(xmParselStr:String) {
object : AsyncTask<String?, String?, SpannableStringBuilder>() {
override fun doInBackground(vararg p0: String?): SpannableStringBuilder? {
return TextRegexUtils.getSpannableStringBuilder(
this@MainActivity,
xmParselStr,
"",
"",
tf
)
}
override fun onPostExecute(spannableStringBuilder: SpannableStringBuilder) {
super.onPostExecute(spannableStringBuilder)
Log.d("abc ", spannableStringBuilder.toString())
tvXmlContent.typeface = tf
tvXmlContent.text = spannableStringBuilder
tvXmlContent.requestLayout()
}
}.execute()
}
其他功能查询
/**
* 历史纪年
*/
EPOCH,
/**
* 古今地名
*/
PLACE_NAME,
/**
* 英译中
*/
ENGLISH
/**
* 中译英
*/
CHINESE_ENGLISH
searchWithType(editText.getText().toString().trim(), "ENGLISH", "");
/**
* 根据类型请求结果
* @param word
* @param type
* @param params , 使用,分隔 (如bookId)
*/
private fun searchWithType(word:String ,type:String, params:String ) {
JuDianSearchManager.sdkGetWordSearchType(this, word,
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 查询结果: ${contentBean.code} ${contentBean.body}")
}
override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
}, type,params)
}
4 错误码说明
SDK返回错误
errorCode: -1001 请求接口超时
errorCode: -1002 网络异常
errorCode: -1003 证书异常,检查本地系统时间
errorCode: -1004 权限不正确,请检查SDK token是否正确
errorCode: -1009 其他错误