Created
February 24, 2022 17:47
-
-
Save developer-shubham101/3210e651a80569825bf24e49b7e301de to your computer and use it in GitHub Desktop.
Perform native operation by javascript in Android
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
import android.app.AlertDialog; | |
import android.content.Context; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.util.Log; | |
import android.webkit.JavascriptInterface; | |
import android.webkit.WebView; | |
import android.webkit.WebViewClient; | |
import androidx.appcompat.app.AppCompatActivity; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
//HTML Content | |
/* | |
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Web View Script</title> | |
</head> | |
<body> | |
<button id="success">Simulate Success</button> | |
<button id="failed">Simulate Failed</button> | |
<button id="sample">Simulate Sample Event</button> | |
<script> | |
var success = document.getElementById('success'); | |
var failed = document.getElementById('failed'); | |
var sample = document.getElementById('sample'); | |
success.addEventListener('click', function () { | |
var message = { | |
"Status": "SUCCESS", | |
"transactionId": "#PAY123133" | |
}; | |
paymentResponse.postMessage(JSON.stringify(message)); | |
}); | |
failed.addEventListener('click', function () { | |
var message = { | |
"Status": "FAILED", | |
"transactionId": "#PAY123133" | |
}; | |
paymentResponse.postMessage(JSON.stringify(message)); | |
}); | |
sample.addEventListener('click', function () { | |
var message = { | |
"Status": "FAILED", | |
"transactionId": "#PAY123133" | |
}; | |
sampleMessage.postMessage(JSON.stringify(message)); | |
}); | |
</script> | |
</body> | |
</html> | |
*/ | |
public class WebViewActivity extends AppCompatActivity { | |
public static final String INTENT_EXTRA_URL = "INTENT_EXTRA_URL"; | |
private static final String TAG = "WebViewActivity"; | |
private final Handler myHandler = new Handler(); | |
/** | |
* Called when the activity is first created. | |
*/ | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_web_view); | |
WebView paymentWebView = findViewById(R.id.paymentWebView); | |
JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface(this); | |
paymentWebView.getSettings().setLightTouchEnabled(true); | |
paymentWebView.getSettings().setJavaScriptEnabled(true); | |
paymentWebView.addJavascriptInterface(myJavaScriptInterface, "paymentResponse"); | |
paymentWebView.addJavascriptInterface(myJavaScriptInterface, "sampleMessage"); | |
paymentWebView.setWebViewClient(new WebViewClient() { | |
//If you will not use this method url links are opeen in new brower not in webview | |
public boolean shouldOverrideUrlLoading(WebView view, String url) { | |
view.loadUrl(url); | |
return true; | |
} | |
//Show loader on url load | |
public void onLoadResource(final WebView view, String url) { | |
// TODO: 01/04/21 Show Waiting Indicator | |
} | |
public void onPageFinished(WebView view, String url) { | |
// TODO: 01/04/21 Hide Waiting Indicator | |
} | |
}); | |
// TODO: 01/04/21 Change URL Base on your requirement | |
String url = "file:///android_asset/index.html"; | |
paymentWebView.loadUrl(url); | |
} | |
private void showAlert(String title, String message) { | |
AlertDialog alertDialog = new AlertDialog.Builder(WebViewActivity.this).create(); | |
alertDialog.setTitle(title); | |
alertDialog.setMessage(message); | |
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", | |
(dialog, which) -> dialog.dismiss()); | |
alertDialog.show(); | |
} | |
public class JavaScriptInterface { | |
Context mContext; | |
JavaScriptInterface(Context c) { | |
mContext = c; | |
} | |
@JavascriptInterface | |
public void postMessage(String webMessage) { | |
myHandler.post(() -> { | |
try { | |
Log.d(TAG, "postMessage: " + webMessage); | |
JSONObject obj = new JSONObject(webMessage); | |
String status = obj.getString("Status"); | |
switch (status) { | |
case "FAILED": | |
showAlert("Payment Declined", "Please try again"); | |
break; | |
case "SUCCESS": | |
showAlert("Payment Success", obj.getString("transactionId")); | |
break; | |
} | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment