2014-03-26 26 views
0

**见修复底部以下问题**加载扫描QR网址到Android的WebView中

确定一切正常,除了加载的URL,当它试图将URL加载到web视图它在超链接前添加url:例如:url:http://google.com,webview不会加载这个当然。我试过.replace(“url:”,“”)和.replaceAll(“url:”,“”)没有成功。 SCAN_RESULT使用zbar条码库生成。

主要活动

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case ZBAR_SCANNER_REQUEST: 
     case ZBAR_QR_SCANNER_REQUEST: 
      if (resultCode == RESULT_OK) { 

       String value = data.getStringExtra(ZBarConstants.SCAN_RESULT); 
       String newValue = value.replaceAll("url:", ""); 

       Intent intent = new Intent(getApplicationContext(), WebViewActivity.class); 
       intent.putExtra("mUrl",newValue); 
       startActivity(intent); 

       //Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_LONG).show(); 
      } else if(resultCode == RESULT_CANCELED && data != null) { 
       String error = data.getStringExtra(ZBarConstants.ERROR_INFO); 
       if(!TextUtils.isEmpty(error)) { 
        Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); 
       } 
      } 
      break; 
    } 
} 

网页视图活动

public class WebViewActivity extends Activity { 

private WebView mWebView; 

@SuppressLint("SetJavaScriptEnabled") 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    String mUrl = getIntent().getStringExtra("mUrl"); 
    //String newMUrl = mUrl.replaceAll("url:", ""); 

    mWebView = (WebView) findViewById(R.id.activity_main_webview); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    mWebView.loadUrl(mUrl); 
    mWebView.setWebViewClient(new WebViewClient()); 
    mWebView.setWebViewClient(new MyAppWebViewClient()); 

} 

web视图客户

public class MyAppWebViewClient extends WebViewClient { 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    view.getContext().startActivity(intent); 
    return true; 
} 
} 
} 

MainActivity(FIXED)

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case ZBAR_SCANNER_REQUEST: 
     case ZBAR_QR_SCANNER_REQUEST: 
      if (resultCode == RESULT_OK) { 

       String value = data.getStringExtra(ZBarConstants.SCAN_RESULT); 
       //The FIX IS BELOW url is case-sensitive, instead of url: it's URL: 
       String newValue = value.replace("URL:", ""); 

       Intent intent = new Intent(getApplicationContext(), WebViewActivity.class); 
       intent.putExtra("mUrl",newValue); 
       startActivity(intent); 

       //Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_LONG).show(); 
      } else if(resultCode == RESULT_CANCELED && data != null) { 
       String error = data.getStringExtra(ZBarConstants.ERROR_INFO); 
       if(!TextUtils.isEmpty(error)) { 
        Toast.makeText(this, error, Toast.LENGTH_SHORT).show(); 
       } 
      } 
      break; 
    } 
} 
+0

我将问题解决为url:实际区分大小写,一旦我调试它。在设备上它显示为一个小写的url:但在实际的代码中它是大写的URL:我希望这可以帮助其他人有同样的问题。 – BeKustom

回答

0

我想你不必把下面的代码放在shouldOverrideUrlLoading,因为返回true告诉WebView URL将由下面的代码处理。即WebView根本不会加载URL。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
view.getContext().startActivity(intent); 
return true; 

所以,如果你想要的网址在网页视图中打开,只是简单地调用回报虚假shouldOverrideUrlLoading,除非你想启动其他应用程序(如Android股票浏览器)打开URL。

+0

谢谢你的解决方案,因为我需要解决这个问题,这也为我解决了这个问题。我正在发表评论,说明我现在需要解决最初的问题。 – BeKustom