Last active
February 8, 2021 15:37
-
-
Save wheeliechamp/5d5d96e0dcd345ab537195080b0c5398 to your computer and use it in GitHub Desktop.
Android Kotlin WebView Sample
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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