안녕하세요.

이번에 어플을 테스트하며 개발을 해보고있는 학생입니다.

어플에 webview를 통해 결제모듈을 불러와 결제하는 방법을 테스트 중인데

오류가 발생하는것도 아니고 결제모듈이 뜨기전까지는 또 백키가 먹히나 결제모듈을 불러오면 백키가 먹히질 않습니다.

webview에서 백키를 구현하는 부분에 로그켓을 두고 봐도 백키는 입력이 되는데 제 성능을 내지 못하는거 같습니다.........

해결방법이 있을까요?

 

 

 super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     mWebView = (WebView) findViewById(R.id.webview); 
     String url = "-------------------------------------------";
     String postData = "";
     mWebView.postUrl("url ,EncodingUtils.getBytes(postData, "BASE64")); 
     mWebView.getSettings().setJavaScriptEnabled(true);      
     mWebView.setWebViewClient(new CustomScheme());
     mWebView.setWebChromeClient(new WebChromeClient(){
      @Override
      public boolean onJsAlert(WebView view, String url, String message, final JsResult result){
       new AlertDialog.Builder(GalleryExample.this)
       .setTitle("경고")
       .setMessage(message)
       .setPositiveButton(android.R.string.ok,
         new AlertDialog.OnClickListener(){
        public void onClick(DialogInterface dialog, int which){
         result.confirm();
        }
       })
       .setCancelable(false)
       .create()
       .show();
       return true;
      }
     });
 }
    @Override     
 public boolean onKeyDown(int keyCode, KeyEvent event) {          
  if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {  
   mWebView.goBack();             
   return true;    
  }  
  return super.onKeyDown(keyCode, event);     
 }
    
    private class CustomScheme extends WebViewClient {
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
      if(url.endsWith(".apk")){
       downloadFile(url);
       return super.shouldOverrideUrlLoading(view, url); 
      } else if (url.startsWith("http:") || url.startsWith("https:")) {
       view.loadUrl("url);
      } else {
       Uri uri = Uri.parse(url);
       Intent intent = new Intent(Intent.ACTION_VIEW, uri);
       try {
        startActivity(intent);
       } catch (ActivityNotFoundException ex) {
           return false;
       }
      }
      return true;
     }
     
/*     public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
      int keyCode = event.getKeyCode();
      if ((keyCode == KeyEvent.KEYCODE_DPAD_LEFT) && mWebView.canGoBack()) {
       mWebView.goBack();
       return true;
      } else if ((keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) && mWebView.canGoForward()) {
       mWebView.goForward();
       return true;
      }
      return false;
     }*/
     
     private void downloadFile(String fileUrl){
          URL myFileUrl =null;          
          try {
               myFileUrl= new URL("fileUrl);
          } catch (MalformedURLException e) {
               e.printStackTrace();
          }
          try {
               HttpURLConnection conn= (HttpURLConnection)myFileUrl.openConnection();
               conn.setDoInput(true);
               conn.connect();
               InputStream is = conn.getInputStream();
// 다운 받는 파일의 경로는 sdcard/ 에 저장되며 sdcard에 접근하려면 uses-permission에 android.permission.WRITE_EXTERNAL_STORAGE을 추가해야만 가능.
               String mPath = "sdcard/v3mobile.apk";
               FileOutputStream fos;
               File f = new File(mPath);
               if ( f.createNewFile() ) {
                fos = new FileOutputStream(mPath);   
                int read;
                while ( (read =  is.read()) != -1) {
                fos.write(read);
                }
                fos.close();
               }
          } catch (IOException e) {
               e.printStackTrace();
          }
          Toast.makeText(getApplicationContext(), "download complete", 0).show();
          
          // 안드로이드 패키지 매니저를 사용한 어플리케이션 설치.
   File apkFile = new File(Environment.getExternalStorageDirectory()+ "/v3mobile.apk");
   Intent intent = new Intent(Intent.ACTION_VIEW);
   intent.setDataAndType( Uri.fromFile(apkFile), "application/vnd.android.package-archive");
         startActivity(intent);
     }
    }
}