安卓设备上的移动集成
本节我们将通过 WebView 使用 Android 移动演示示例(可在 GitHub 获取)展示集成流程。
基于 ONLYOFFICE 测试示例的集成
本示例演示如何将 ONLYOFFICE 移动端网页编辑器与 ONLYOFFICE 测试或 DMS 示例集成。
打开 ONLYOFFICE 编辑器
-
从 GitHub下载 Android 移动演示示例。
-
使用 Android Studio 打开顶层的 build.gradle 文件,修改示例代码片段以适配您的 DMS 系统。
-
在模块级 build.gradle 文件中,通过设置 DOCUMENT_SERVER_URL 属性值指定 ONLYOFFICE 文档网页界面地址来显示 DMS 主页:
buildConfigField("String", "DOCUMENT_SERVER_URL", "https://documentserver/")
其中 documentserver 是已安装 ONLYOFFICE 文档的服务器名称。
若未指定 DOCUMENT_SERVER_URL,将出现错误提示:
private fun showDialog() {
AlertDialog.Builder(requireContext())
.setMessage("Document server url is empty.\nYou must specify the address in build.gradle")
.setPositiveButton("Ok") { dialog, _ ->
dialog.dismiss()
requireActivity().finish()
}
.create()
.show()
} -
使用 MainFragment.kt 控制器实现 Android 设备上通过 WebView 正确打开编辑器。在该控制器中定义通过 WebView 组件打开文档的函数,检测 URL 是否包含标识文档打开的 "editor" 字符串:
private class MainWebViewClient(private val navController: NavController) : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
val url = request?.url
if (url != null) {
val path = url.path
if (path?.contains("editor") == true) {
navController.navigate(R.id.action_mainFragment_to_editorFragment, Bundle(1).apply {
putString("document_url", url.toString())
})
return true
}
return false
}
return super.shouldOverrideUrlLoading(view, request)
}
}MainFragment.kt 完整代码请参见此处。
-
在 EditorFragment.kt 控制器中配置 WebView 及布局,通过 WebView 组件在移动设备显示 ONLYOFFICE 编辑器:
@SuppressLint("SetJavaScriptEnabled")
private fun setSettings() {
webView?.settings?.apply {
javaScriptEnabled = true
javaScriptCanOpenWindowsAutomatically = true
loadWithOverviewMode = true
cacheMode = WebSettings.LOAD_NO_CACHE
domStorageEnabled = true
}
webView?.webViewClient = EditorWebViewClient(findNavController())
} -
在 Android Studio 工具栏中选择应用和设备,点击项目工具栏中的运行按钮构建并运行代码。
-
应用将展示 ONLYOFFICE 移动网页编辑器与测试/DMS 示例的集成效果。
关闭 ONLYOFFICE 编辑器
使用 EditorFragment.kt 控制器退出编辑器:
private class EditorWebViewClient(private val navController: NavController) : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
request?.url?.let { url ->
if (!url.toString().contains("editor")) {
navController.popBackStack()
return true
}
}
return super.shouldOverrideUrlLoading(view, request)
}
}
EditorFragment.kt 完整代码请参见此处。