Skip to content

Instantly share code, notes, and snippets.

@wheeliechamp
Last active February 8, 2021 15:37
Show Gist options
  • Save wheeliechamp/5d5d96e0dcd345ab537195080b0c5398 to your computer and use it in GitHub Desktop.
Save wheeliechamp/5d5d96e0dcd345ab537195080b0c5398 to your computer and use it in GitHub Desktop.
Android Kotlin WebView Sample
package com.wheeliechamp.myapplication3
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.webkit.*
import android.widget.TextView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
private val timer = ThreadTimer()
private var page_src: String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
timer.setListener(mainListener)
val webView: WebView = findViewById<WebView>(R.id.webView)
webView.settings.javaScriptEnabled = true
webView.settings.userAgentString = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
val userAgent = webView.settings.getUserAgentString()
Log.d("Test :: ", userAgent)
var scale = this.resources.displayMetrics.density * 100
Log.d("Test :: ", scale.toString())
webView.setInitialScale(80)
webView.settings.loadWithOverviewMode = true
webView.webViewClient = object : ViewSourceClient(){}
webView.addJavascriptInterface(this, "activity")
webView.settings.domStorageEnabled = true
val cookieManager: CookieManager = CookieManager.getInstance()
cookieManager.setAcceptCookie(true)
cookieManager.removeAllCookies(null)
webView.settings.setAppCachePath(applicationContext.cacheDir.absolutePath)
webView.settings.allowFileAccess = true
webView.settings.setAppCacheEnabled(true)
webView.settings.cacheMode = WebSettings.LOAD_DEFAULT
webView.loadUrl("https://www.yahoo.co.jp/")
//webView.loadUrl("https://sport.netbet.com/ja/")
//webView.loadUrl("https://s5.sir.sportradar.com/betsgivirtuals/ja/1/season/2021258")
//webView.loadUrl("https://sport.netbet.com/ja/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%84-3%E3%82%A6%E3%82%A7%E3%82%A4/")
//webView.loadUrl("https://sport.netbet.com/")
//https://s5.sir.sportradar.com/betsgivirtuals/ja/1/category/1111
}
open class ViewSourceClient : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
view.loadUrl("javascript:window.activity.viewSource(document.documentElement.innerHTML);")
//view.loadUrl("javascript:window.activity.viewSource(document.documentElement.outerHTML);")
//view.loadUrl("javascript:window.activity.viewSource(document.getElementsByClassName('panel-body')[0].innerText);")
Log.d("Test :: ", "何かしらのソース解析")
Log.d("Test :: ", page_src)
}
}
@JavascriptInterface
fun viewSource(src: String) {
page_src = src
}
private val mainListener = object : ThreadTimerInterface{
override fun onSuccess(result: Int) {
super.onSuccess(result)
val vtTime = findViewById<TextView>(R.id.tvTime)
vtTime.setText(result.toString())
}
}
fun onButtonStart(view : View){
timer.start(this)
}
fun onButtonStop(view : View){
timer.stop()
}
abstract class ScopedAppActivity: AppCompatActivity(), CoroutineScope by MainScope() {
override fun onDestroy() {
super.onDestroy()
//cancel()
}
}
interface ThreadTimerInterface : ThreadTimer.Listener {
fun onSuccess(result: Int){}
}
}
class ThreadTimer() : MainActivity.ScopedAppActivity(){
private var listener: MainActivity.ThreadTimerInterface? = null
interface Listener {}
var thread : Thread? = null
var counter : Int = 0
var enable : Boolean = false
fun setListener(listener: ThreadTimer.Listener?) {
if (listener is MainActivity.ThreadTimerInterface) {
this.listener = listener as MainActivity.ThreadTimerInterface
}
}
fun start(activity: MainActivity){
if (enable == true) return
enable = true
thread = Thread {
while (enable) {
try {
Thread.sleep(15000)
launch {
counter++
listener?.onSuccess(counter);
val webView = activity.findViewById<WebView>(R.id.webView)
if (counter%2 == 0) {
//webView.reload()
webView.loadUrl("https:www.google.com")
Log.d("Test :: ", counter.toString())
} else {
webView.loadUrl("https:www.yahoo.co.jp")
Log.d("Test :: ", counter.toString())
}
}
} catch (ex: InterruptedException) {
Thread.currentThread().interrupt()
}
}
}
thread?.start()
}
fun stop(){
if (enable == false) return
thread?.interrupt()
enable = false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment