title: Android Webview net::ERR_UNKNOWN_URL_SCHEME Error To Play Store
body: <p>I have problem Android webview App, When I click a link to google play which goes to Play Store App,  I get this error:</p>
  
  <p>net::ERR_UNKNOWN_URL_SCHEME</p>
  
  <p><a href="https://i.stack.imgur.com/hHBJG.jpg" rel="nofollow noreferrer">error image ERR_UNKNOWN_URL_SCHEME</a></p>
  
  <p>This is my MainActivity.java full: <a href="https://date.perjaka.id/android-webview-neterr_unknown_url_scheme-error-to-play-store.html" rel="nofollow noreferrer">https://date.perjaka.id/android-webview-neterr_unknown_url_scheme-error-to-play-store.html</a></p>
  
  <p>Please Help me :(
  i'm frustated this problem for my project.</p>
  
  <pre><code>package id.ayogoonline.www.forumpencarianjodohonline;
  
  import android.Manifest;
  import android.app.Activity;
  import android.app.ProgressDialog;
  import android.content.ClipData;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.graphics.Bitmap;
  import android.net.Uri;
  import android.os.Build;
  import android.os.Bundle;
  import android.os.Environment;
  import android.provider.MediaStore;
  import android.support.v4.app.ActivityCompat;
  import android.util.Log;
  import android.view.KeyEvent;
  import android.view.View;
  import android.webkit.ValueCallback;
  import android.webkit.WebChromeClient;
  import android.webkit.WebSettings;
  import android.webkit.WebView;
  import android.webkit.WebViewClient;
  
  import java.io.File;
  import java.io.IOException;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  
  
  public class MainActivity extends Activity {
  
      private static final int INPUT_FILE_REQUEST_CODE = 1;
      private static final String TAG = MainActivity.class.getSimpleName();
      private WebView webView;
      private WebSettings webSettings;
      private ValueCallback&lt;Uri[]&gt; mUploadMessage;
      private String mCameraPhotoPath = null;
      private long size = 0;
  
      // Storage Permissions variables
      private static final int REQUEST_EXTERNAL_STORAGE = 1;
      private static String[] PERMISSIONS_STORAGE = {
              Manifest.permission.READ_EXTERNAL_STORAGE,
              Manifest.permission.WRITE_EXTERNAL_STORAGE,
              Manifest.permission.CAMERA
      };
  
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (requestCode != INPUT_FILE_REQUEST_CODE || mUploadMessage == null) {
              super.onActivityResult(requestCode, resultCode, data);
              return;
          }
          try {
              String file_path = mCameraPhotoPath.replace("file:","");
              File file = new File(file_path);
              size = file.length();
  
          }catch (Exception e){
              Log.e("Error!", "Error while opening image file" + e.getLocalizedMessage());
          }
  
          if (data != null || mCameraPhotoPath != null) {
              Integer count = 0; //fix fby https://github.com/nnian
              ClipData images = null;
              try {
                  images = data.getClipData();
              }catch (Exception e) {
                  Log.e("Error!", e.getLocalizedMessage());
              }
  
              if (images == null &amp;&amp; data != null &amp;&amp; data.getDataString() != null) {
                  count = data.getDataString().length();
              } else if (images != null) {
                  count = images.getItemCount();
              }
              Uri[] results = new Uri[count];
              // Check that the response is a good one
              if (resultCode == Activity.RESULT_OK) {
                  if (size != 0) {
                      // If there is not data, then we may have taken a photo
                      if (mCameraPhotoPath != null) {
                          results = new Uri[]{Uri.parse(mCameraPhotoPath)};
                      }
                  } else if (data.getClipData() == null) {
                      results = new Uri[]{Uri.parse(data.getDataString())};
                  } else {
  
                      for (int i = 0; i &lt; images.getItemCount(); i++) {
                          results[i] = images.getItemAt(i).getUri();
                      }
                  }
              }
  
              mUploadMessage.onReceiveValue(results);
              mUploadMessage = null;
          }
      }
  
      public static void verifyStoragePermissions(Activity activity) {
          // Check if we have read or write permission
          int writePermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
          int readPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE);
          int cameraPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);
  
          if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED || cameraPermission != PackageManager.PERMISSION_GRANTED) {
              // We don't have permission so prompt the user
              ActivityCompat.requestPermissions(
                      activity,
                      PERMISSIONS_STORAGE,
                      REQUEST_EXTERNAL_STORAGE
              );
          }
      }
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          verifyStoragePermissions(this);
  
          webView = (WebView) findViewById(R.id.webView);
          webSettings = webView.getSettings();
          webSettings.setJavaScriptEnabled(true);
          webSettings.setLoadWithOverviewMode(true);
          webSettings.setAllowFileAccess(true);
          webView.setWebViewClient(new PQClient());
          webView.setWebChromeClient(new PQChromeClient());
          //if SDK version is greater of 19 then activate hardware acceleration otherwise activate software acceleration
          if (Build.VERSION.SDK_INT &gt;= 19) {
              webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
          } else if (Build.VERSION.SDK_INT &gt;= 11 &amp;&amp; Build.VERSION.SDK_INT &lt; 19) {
              webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
          }
  
          webView.loadUrl("https://www.ayogoonline.id/");
      }
  
      private File createImageFile() throws IOException {
          // Create an image file name
          String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
          String imageFileName = "JPEG_" + timeStamp + "_";
          File storageDir = Environment.getExternalStoragePublicDirectory(
                  Environment.DIRECTORY_PICTURES);
          File imageFile = File.createTempFile(
                  imageFileName,  /* prefix */
                  ".jpg",         /* suffix */
                  storageDir      /* directory */
          );
          return imageFile;
      }
  
      public class PQChromeClient extends WebChromeClient {
  
          // For Android 5.0+
          public boolean onShowFileChooser(WebView view, ValueCallback&lt;Uri[]&gt; filePath, WebChromeClient.FileChooserParams fileChooserParams) {
              // Double check that we don't have any existing callbacks
              if (mUploadMessage != null) {
                  mUploadMessage.onReceiveValue(null);
              }
              mUploadMessage = filePath;
              Log.e("FileCooserParams =&gt; ", filePath.toString());
  
              Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
              if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                  // Create the File where the photo should go
                  File photoFile = null;
                  try {
                      photoFile = createImageFile();
                      takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
                  } catch (IOException ex) {
                      // Error occurred while creating the File
                      Log.e(TAG, "Unable to create Image File", ex);
                  }
  
                  // Continue only if the File was successfully created
                  if (photoFile != null) {
                      mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
                      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                  } else {
                      takePictureIntent = null;
                  }
              }
  
              Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
              contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
              contentSelectionIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
              contentSelectionIntent.setType("image/*");
  
              Intent[] intentArray;
              if (takePictureIntent != null) {
                  intentArray = new Intent[]{takePictureIntent};
              } else {
                  intentArray = new Intent[2];
              }
  
              Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
              chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
              chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
              chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
              startActivityForResult(Intent.createChooser(chooserIntent, "Select images"), 1);
  
              return true;
  
          }
      }
  
      public boolean onKeyDown(int keyCode, KeyEvent event) {
          // Check if the key event was the Back button and if there's history
          if ((keyCode == KeyEvent.KEYCODE_BACK) &amp;&amp; webView.canGoBack()) {
              webView.goBack();
              return true;
          }
          // If it wasn't the Back key or there's no web page history, bubble up to the default
          // system behavior (probably exit the activity)
  
          return super.onKeyDown(keyCode, event);
      }
  
  
      public class PQClient extends WebViewClient {
          ProgressDialog progressDialog;
  
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
  
              // If url contains mailto link then open Mail Intent
              if (url.contains("mailto:")) {
  
                  // Could be cleverer and use a regex
                  //Open links in new browser
                  view.getContext().startActivity(
                          new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
  
                  // Here we can open new activity
  
                  return true;
  
              } else {
  
                  // Stay within this webview and load url
                  view.loadUrl(url);
                  return true;
              }
          }
  
          //Show loader on url load
          public void onPageStarted(WebView view, String url, Bitmap favicon) {
  
              // Then show progress  Dialog
              // in standard case YourActivity.this
              if (progressDialog == null) {
                  progressDialog = new ProgressDialog(MainActivity.this);
                  progressDialog.setMessage("Loading...");
                  progressDialog.hide();
              }
          }
  
          // Called when all page resources loaded
          public void onPageFinished(WebView view, String url) {
              webView.loadUrl("javascript:(function(){ " +
                      "document.getElementById('android-app').style.display='none';})()");
  
              try {
                  // Close progressDialog
                  if (progressDialog.isShowing()) {
                      progressDialog.dismiss();
                      progressDialog = null;
                  }
              } catch (Exception exception) {
                  exception.printStackTrace();
              }
          }
      }
  
  
  }
  </code></pre>