Reputation: 89
I want to change page from Webpage not Available
or ERR_NAME_NOT_RESOLVED
to My Page "No Internet Connection"?
and with a refresh button to back online if online or connected internet again, and if didn't connect just stay in Page No Internet Connection.
Look like a page HTML
not default notif page android
.
I'm using a Android Studio
with Kotlin
This is MyActivity
class MainActivity : AppCompatActivity() {
internal var webView: WebView? = null
private var mCM: String? = null
private var mUM: ValueCallback<Uri>? = null
private var mUMA: ValueCallback<Array<Uri?>>? = null
//select whether you want to upload multiple files (set 'true' for yes)
private val multiple_files = false
@SuppressLint("SetJavaScriptEnabled", "WrongViewCast")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
webView = findViewById(R.id.ifView) as WebView
assert(webView != null)
val webSettings = webView!!.settings
webSettings.javaScriptEnabled = true
webSettings.allowFileAccess = true
if (Build.VERSION.SDK_INT >= 21) {
webSettings.mixedContentMode = 0
webView!!.setLayerType(View.LAYER_TYPE_HARDWARE, null)
}
else {
webView!!.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
}
webView!!.webViewClient = Callback()
webView!!.loadUrl("http://xxx.xxx.xxx") //add your test web/page address here
webView!!.setWebChromeClient(object : WebChromeClient()
}
This is my code Callback
inner class Callback : WebViewClient() {
override fun onReceivedError(view: WebView, errorCode: Int, description: String, failingUrl: String) {
Toast.makeText(applicationContext, "Failed loading app!", Toast.LENGTH_SHORT).show()
}
}
For sure, my apps want load offline page where webview
offline to notif the apps didn't connect internet, and connect again to the internet showing online page when webview
online
Upvotes: 2
Views: 3617
Reputation: 759
Replace default WebChromeClient with your custom CustomWebviewClient as below
webView!!.setWebViewClient(object : CustomWebviewClient()
then create this custom WebViewClient
inner class CustomWebviewClient : WebViewClient() {
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap) {
super.onPageStarted(view, url, favicon)
}
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
}
override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError) {
super.onReceivedError(view, request, error)
if (noInternetConnection()) {
loadNoInternetErrorView()
} else {
loadErrorMessageView()
}
}
}
whenever your WebView fails to load page it calls onReceivedError
callback there you can show error layout. For error view you can create error layout within your layout with initial visiblity View.GONE and make it visible when error occurrs.
Changes to your XML file
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/error_screen"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Textview
android:id="@+id/error_msg" />
................
<ImageView
android:id=:"@+id/error_icon/>
//error view
</LinearLayout>
In loadErrorMessageView you can do this
loadErrorMessageView() {
webview.setVisibility(View.GONE);
error_screen.setVisibility(View.VISIBLE);
error_msg.setText("Some error Occurred");
}
Similarly you can do for NoInternet case maybe you can show "No internet message" than "Some error occurred" I hope this clears your doubt
Upvotes: 1