android kotlin 与 js 交互

2018-02-03 10:27:27来源:网络收集作者:管理员人点击

分享

不喜欢说太多,喜欢直接干,直接上代码,这才是我的风格。
fragment


package com.meinong.fragment.kotlin
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import com.meinong.R
import com.meinong.base.TitleBarFragment
import com.meinong.common.Appconfig
import com.meinong.utils.CameraUtils
/**
* @Created: xiaoyuon 2018.01.25 10:39.
* @Describe:
* @Review:
* @Modify:
* @Version:v_1.0 on 2018.01.25 10:39.
* @Blog:http://blog.csdn.net/noteschapter
* @Github:https://github.com/mrxiaoyu100001
* @Resources:
* @Remark:
*/
class UserFragment : TitleBarFragment() {
private var wv_content: WebView? = null
override fun inflaterView(inflater: LayoutInflater, container: ViewGroup?, bundle: Bundle?): View {
return inflater.inflate(R.layout.fragment_user_center, null)
}
override fun setActionBarRes(actionBarRes: ActionBarRes?) {
super.setActionBarRes(actionBarRes)
actionBarRes?.middleTitle = getString(R.string.user_center)
actionBarRes?.leftImageVisible = Appconfig.DEFAULT_VALUE_LONG
}
override fun onBackClick() {
super.onBackClick()
onBackPressed()
}
override fun initWidget(parentView: View?) {
super.initWidget(parentView)
wv_content = bindView(R.id.frag_wv_content)
val wv_setting = wv_content?.settings
wv_setting?.javaScriptEnabled = true;
wv_setting?.javaScriptCanOpenWindowsAutomatically = true
wv_content?.addJavascriptInterface(UserjsInterface(this@UserFragment, wv_content), "javascript")
wv_content?.loadUrl("file:///android_asset/web/usercenter.html")
wv_content?.setWebViewClient(object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
view?.loadUrl(url)
return true
}
})
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == Appconfig.CAMERA_SELECT || requestCode == Appconfig.TICKET_TAKE) {
compressWithLs(data, requestCode, wv_content)
} else if (requestCode == Appconfig.TAG_ONE) {
wv_content?.post(object : Runnable {
override fun run() {
wv_content?.loadUrl("javascript:setAddress('" + data?.getStringExtra("address") + "')")
}
})
}
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == Appconfig.CAMERA_SELECT) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
CameraUtils.selectPhoto(this@UserFragment)
}
return
} else if (requestCode == Appconfig.CAMERA_TAKE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
CameraUtils.takePhoto(this@UserFragment)
}
return
}
}
}

builder


package com.meinong.fragment.kotlin
import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.util.Log
import android.webkit.JavascriptInterface
import android.webkit.WebView
import com.alibaba.fastjson.JSON
import com.android.volley.VolleyError
import com.android.volley.toolbox.Volley
import com.meinong.MyApplication
import com.meinong.base.SimpleBackPage
import com.meinong.base.TitleBarFragment
import com.meinong.bean.base.BaseRequest
import com.meinong.bean.base.BaseResponse
import com.meinong.bean.user.LogoutRequest
import com.meinong.bean.user.UserCenterRequest
import com.meinong.bean.user.UserCenterResponse
import com.meinong.common.AppMethod
import com.meinong.common.Appconfig
import com.meinong.common.Appconfig.imagePath
import com.meinong.common.MNUrls
import com.meinong.utils.AbsolutePathUtil
import com.meinong.utils.CameraUtils
import com.meinong.utils.PopupWindowUtil
import com.meinong.utils.cmpic.Luban
import com.meinong.utils.cmpic.OnCompressListener
import com.meinong.volley.HttpEngine
import com.meinong.volley.MultiPartStack
import com.meinong.volley.MyRequestCallBack
import com.meinong.widget.MiddlePopupWindow
import org.mn.frame.utils.MNLoger
import java.io.File
/**
* @Created: xiaoyuon 2018.01.29 17:17.
* @Describe:
* @Review:
* @Modify:
* @Version:v_1.0 on 2018.01.29 17:17.
* @Blog:http://blog.csdn.net/noteschapter
* @Github:https://github.com/mrxiaoyu100001
* @Resources:
* @Remark:
*/
class UserJSInterface {
private var fragment: TitleBarFragment? = null
private var wv_content: WebView? = null
private var bundle: Bundle? = null
constructor(fragment: TitleBarFragment, webView: WebView?) {
this@UserJSInterface.fragment = fragment
this@UserJSInterface.wv_content = webView
bundle = Bundle()
}
@JavascriptInterface
public fun getData() {
val request = UserCenterRequest()
request.userId = MyApplication.userId
request.appCode = Appconfig.APP_CODE
val stringRequest = HttpEngine.postRequest(MNUrls.USER_CENTER_URL, request, UserCenterResponse::class.java,
object : MyRequestCallBack() {
override fun onPostResponse(response: UserCenterResponse) {
if (Appconfig.RequestSuccess == response.resultCode) {
wv_content?.loadUrl("javascript:setData(" + JSON.toJSONString(response.data).toString()
+ ",'" + getVerName(fragment?.activity!!) + "')")
}
}
override fun onPostErrorResponse(volleyError: VolleyError, msg: String) {
}
}, Appconfig.TimeOutSec)
MyApplication.contextApp.mRequestQueue.add(stringRequest)
}
@JavascriptInterface
public fun selectPhoto() {
showChoosePic(fragment!!)
}
@JavascriptInterface
public fun selectPicture(url: String) {
bundle?.putString("data", "个人照片")
if (url != null) {
bundle?.putString("pic_url", url)
MyApplication.imgPath = url
}
AppMethod.postShowWith(fragment?.activity, SimpleBackPage.PictureShow, bundle)
}
@JavascriptInterface
public fun selectAddress() {
bundle?.putString("data", "常用地址")
AppMethod.postShowForResult(fragment, Appconfig.TAG_ONE, SimpleBackPage.CommonAddess, bundle)
}
@JavascriptInterface
public fun changePwd() {
AppMethod.postShowWith(fragment?.activity, SimpleBackPage.AlterPwdStep1)
}
@JavascriptInterface
public fun selectPack() {
AppMethod.postShowWith(fragment?.activity, SimpleBackPage.PackageTransport)
}
@JavascriptInterface
public fun helpCenter() {
AppMethod.postShowWith(fragment?.activity, SimpleBackPage.HelpCenter)
}
@JavascriptInterface
public fun addAdvice() {
AppMethod.postShowWith(fragment?.activity, SimpleBackPage.UserAdviceFragment)
}
@JavascriptInterface
public fun submit() {
showOut(fragment?.activity)
}
}
private fun getVerName(context: Context?): String {
var verName = ""
try {
verName = context?.packageManager?.getPackageInfo(context.packageName, 0)?.versionName!!
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return verName
}
private fun showChoosePic(fragment: TitleBarFragment) {
PopupWindowUtil.showPopChoosePic(fragment.activity, false, object : MiddlePopupWindow.PopupWindowCallBack {
override fun onNegativeButtonClick() {
fromAlbum(fragment = fragment)
}
override fun onPositiveButtonClick() {
fromCamera(fragment)
}
})
}
private fun fromAlbum(fragment: TitleBarFragment) {
if (ContextCompat.checkSelfPermission(fragment.activity, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(fragment.activity,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
Appconfig.CAMERA_SELECT)
} else {
CameraUtils.selectPhoto(fragment)
}
}
private fun fromCamera(fragment: TitleBarFragment) {
if (ContextCompat.checkSelfPermission(fragment.activity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(fragment.activity,
arrayOf(Manifest.permission.CAMERA),
Appconfig.CAMERA_TAKE)
} else {
CameraUtils.takePhoto(fragment)
}
}
fun compressWithLs(data: Intent?, type: Int, webView: WebView?) {
try {
if (!AppMethod.isExit(imagePath)) AppMethod.createFile(imagePath)
if (type == Appconfig.CAMERA_SELECT) {
val uri = data?.data
var imgPath = AbsolutePathUtil.getAbsolutePath(webView?.context, uri)
webView?.loadUrl("javascript:setUserImage('" + imgPath + "')")
Log.e("path", imgPath)
uploadPic(webView?.context, imgPath)
} else if (type == Appconfig.CAMERA_TAKE) {
val mFile = File(CameraUtils.getPhotopath())
Luban.get(webView?.context)
.load(mFile)
.putGear(Luban.THIRD_GEAR)
.setFilename(imagePath + System.currentTimeMillis())
.setCompressListener(object : OnCompressListener {
override fun onStart() {
}
override fun onSuccess(file: File) {
Log.e("path", file.absolutePath)
webView?.loadUrl("javascript:setUserImage('" + file.absoluteFile + "')")
uploadPic(webView?.context, file.absolutePath)
}
override fun onError(e: Throwable) {
}
})
.launch()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun uploadPic(context: Context?, url: String) {
var request = BaseRequest()
request.userId = MyApplication.userId
Volley.newRequestQueue(context, MultiPartStack())
.add(HttpEngine.postMultRequest(MNUrls.USER_CENTER_UPLOADPIC_URL,
request, BaseResponse::class.java,
object : MyRequestCallBack() {
override fun onPostResponse(response: BaseResponse?) {
MNLoger.debug("上传成功:" + response?.resultCode)
}
override fun onPostErrorResponse(volleyError: VolleyError?, msg: String?) {
MNLoger.debug("上传失败:" + msg)
}
}, Appconfig.TimeOutSec, "headFile", File(url)))
}
private fun showOut(activity: Activity?) {
PopupWindowUtil.showPopWindow(activity, "", "是否退出登录", false, object : MiddlePopupWindow.PopupWindowCallBack {
override fun onNegativeButtonClick() {
}
override fun onPositiveButtonClick() {
loginOut(activity)
}
})
}
private fun loginOut(activity: Activity?) {
val request = LogoutRequest()
request.accountId = MyApplication.accountId
val stringRequest = HttpEngine.postRequest(MNUrls.LogoutUrl, request, UserCenterResponse::class.java, object : MyRequestCallBack() {
override fun onPostResponse(obj: UserCenterResponse) {
if ("121" == obj.resultCode) {
AppMethod.clearAppCatch(activity)
}
}
override fun onPostErrorResponse(volleyError: VolleyError, msg: String) {
}
}, Appconfig.TimeOutSec)
MyApplication.contextApp.mRequestQueue.add(stringRequest)
}

js


var img_url;
$(document).ready(function(){
window.javascript.getData()
$("#div_user").click(function(e){
if ("img_user" != $(e.target).attr("id")){
window.javascript.selectPhoto()
}
})
$("#img_user").click(function() {
window.javascript.selectPicture(img_url)
})
$("#div_address").click(function(){
window.javascript.selectAddress()
})
$("#div_change").click(function(){
window.javascript.changePwd()
})
$("#div_pack").click(function(){
window.javascript.selectPack()
})
$("#div_help").click(function(){
window.javascript.helpCenter()
})
$("#div_advice").click(function(){
window.javascript.addAdvice()
})
$("#btn_submit").click(function(){
window.javascript.submit()
})
})
function setData(response, current) {
$("#img_user").attr("src", "http://101.201.111.60/" + response.imgPath)
$("#sp_name").text(response.userName + " | " + response.orgName)
$("#span_address").text(response.commAddress)
$("#span_phone").text(response.cellphone)
$("#span_version").text(current)
img_url = response.imgPath
}
function setUserImage(img_url) {
$("#img_user").attr("src", img_url)
}
function setAddress(address) {
$("#span_address").text(address)
}

css


* {
margin:0;
padding:0;
overflow:hidden;
}
body {
height:100%;
width:100%;
background-color:#eee;
}
div {
height:44px;
background-color:#fff;
}
span {
font-size:14px;
font-color:#474952;
}
.content_user {
width:100%;
height:72px;
}
.image_user {
width:48px;
height:48px;
border-radius:200px;
border:none;
margin-top:12px;
margin-left:12px;
}
.user_text {
position:absolute;
margin-left:12px;
line-height:72px;
text-align:center;
}
.image_right {
width:12px;
height:12px;
position:absolute;
right:12px;
top:30px;
}
.address {
height:44px;
width:100%;
margin-top:12px;
position:relative;
}
.address_title {
position:absolute;
top:13px;
left:12px;
text-align:center;
}
.arrow_address {
width:12px;
height:12px;
position:absolute;
right:12px;
top:15px;
}
.submit {
height:48px;
width:336px;
margin-top:18px;
position:absolute
font-size:30%;
background-color:rgb(230,57,40);
color:rgb(255,255,255);
align:center;
margin-left:12px;
border-color:rgb(255,255,255) rgb(255,255,255) rgb(255,255,255) rgb(255,255,255);
border-radius:5px;
border:none;
display:block;
}

不解释打完手工。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台