public class MainActivity extends Activity {
private WebView webView;
public static String sData="";
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webView1);
webView.setWebViewClient((new WebViewClient()));
WebSettings webSettings = webView.getSettings();
webView.getSettings().setSupportMultipleWindows(false);
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(this), "android");
webView.requestFocus();
webView.loadUrl(http://--/mweb/sd_test.php);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try{
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String sData=data.getStringExtra("SCAN_RESULT");
String strJavaScript = "getScan('"+sData+"')"; //스크립트 함수에 매개변수를 넣는다.
webView.loadUrl("javascript:"+strJavaScript);
}
}
}catch (Exception e) {
// TODO: handle exception
Log.i("err:",e.toString());
}
}
public class JavaScriptInterface {
Context mContext;
JavaScriptInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void openScan() { //web에서 자바스크립트로호출
Intent intentScan = new Intent("com.google.zxing.client.android.SCAN");
intentScan.setPackage("com.google.zxing.client.android");
startActivityForResult(intentScan,0);
}
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void scanJS(String getData) {
Toast.makeText(mContext, getData, Toast.LENGTH_SHORT).show();
//scanCode();
}
}
class WebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
웹뷰로 sd_test.php파일을 불러온후 페이지내 스캐너버튼클릭->openScan()함수가 호출되어
안드로이드에서 스캐너구동->스캔값을 가져와서 다시 sd_test.php파일에 함수를통해 보내려고 합니다.
현재 onActivityResult 에서 sData값까지 가져오는건 확인했습니다. 그다음
webView.loadUrl("javascript:"+strJavaScript);
이렇게 호출하면 안되는데...제가 잘못구현을 한건가봅니다..
아직 안드로이드한지가 얼마안되서...모르는게 많구요..ㅠ
비동기식 네이티브방식이 따로있는지.. 방법을 계속 구글링하는데 갈피를 못잡습니다. 조언좀 주세요