I'm working on an App, where I execute a Java method when I click on a link in a webview and expect a result from that method. In that method I start another activity with startActivityForResult which works just fine (I have putted some logs on that activity and everythings is good), but it looks like the method doesn't return anything..
Here's my code :
HTML : (all the includes are ok)
<script type="text/javascript">
$("#run-qrscan").on("click", function(){
var qr_data = window.WebAppInterface.startScan();
// startScan is the Java method I call
// call the function opens the activity etc.. but doesn't get any result
$("#display-qrresult").html(qr_data); // doesn't display anything
});
</script>
My activity : WebActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
WebView webview = (WebView) findViewById(R.id.aw_webView);
WebAppInterface jsInterface = new WebAppInterface(this);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.addJavascriptInterface(jsInterface, "WebAppInterface");
webview.loadUrl("file:///android_asset/index.html");
}
My Javascript interface : WebAppInterface.java
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.webkit.JavascriptInterface;
public class WebAppInterface {
private static Activity activity;
public static int WEB_APP = 0;
private static int REQUEST_FOR_ACTIVITY_CODE_SCAN = 1000;
private static String qr_data = "";
private static Intent intent;
public WebAppInterface(Activity activity) {
WebAppInterface.activity = activity;
}
@JavascriptInterface
public static String startScan() {
Intent intent = new Intent(activity, ScanActivity.class);
WEB_APP = 1;
activity.startActivityForResult(intent, REQUEST_FOR_ACTIVITY_CODE_SCAN);
//Wait for startActivityForResult to end -since it's asynchronous
while(WEB_APP == 1) {}
Log.d("qr_return", qr_data); // Doesn't display it.
return qr_data; // Empty
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Scan QR
if (requestCode == REQUEST_FOR_ACTIVITY_CODE_SCAN) {
if (resultCode == Activity.RESULT_OK) {
qr_data = data.getStringExtra("qr_data");
}
}
WEB_APP = 0;
}
}
So what am I doing wrong ? Thank you.