2017-02-22 42 views
3

Хотя это задавалось несколько раз, единственным вопросом, который действительно имеет отношение к моей проблеме, является это (Can I use shouldInterceptRequest to block a particular call in Android?), но он был задан более 3 лет назад и в итоге не получил никаких ответов.Предотвращение загрузки данных с использованием shouldInterceptRequest

Запрос, который я пытаюсь заблокировать, является POST-запросом, поэтому метод shouldOverrideUrlLoading не может его перехватить.

После нажатия кнопки веб-просмотр загружает URL-адрес, содержащий следующую строку: «androidBundleId _ ********».

Мне нужно блокировать этот запрос и перенаправляет пользователей на Play Store (но я знаю, как это сделать!)

Проблема заключается в том, что тип возвращаемого значения shouldInterceptRequest метода является WebResourceResponse(о, как я хочу, это было логично!). Поэтому я должен вернуть хотя бы пустой WebResourceResponse.

Я не хочу, поскольку все, что находится внутри WebResourceResponse, загружается в мое приложение. Я просто хочу, чтобы веб-просмотр перехватил запрос и заблокировал его.

Приложение должно показывать одну и ту же веб-страницу, никакие данные не должны загружаться, кроме намерений Play Store.

Я размещаю только соответствующую часть своего кода.

@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, String url) { 
    if(url.contains("androidBundleId_")){ 
     String bundleID = url.substring(url.indexOf("androidBundleId_")+"androidBundleId".length()+1, url.length()); 
     try { 
      getContext().startActivity(new Intent 
        (Intent.ACTION_VIEW, Uri.parse("market://details?id=" + bundleID))); 
     } catch (android.content.ActivityNotFoundException anfe) { 
      getContext().startActivity(new Intent 
        (Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + bundleID))); 
     } 

     // I'D LIKE TO RETURN NOTHING HERE !!! 
    } 
    return super.shouldInterceptRequest(view, url); 
} 

Я знаю, что эта подпись является устаревшим, но я строю приложение с minSdk 16, поэтому я могу использовать только этот, а не один прием запроса в качестве второго параметра.

У вас есть обходной путь? Обратите внимание, что я не могу изменить веб-страницу, содержащую кнопку.

ответ

0

Поскольку нет возможности делать то, о чем я просил, мы изменили всю логику приложения и, в конечном итоге, переключились на WebChromeClient. Он обрабатывает ссылки/намерения автоматически

+0

Вы знаете, что эквивалентно классу 'WebResourceResponse'? Я имею в виду что-то, что работает как 'shouldInterceptRequest', но ничего не возвращает. Каково точное решение вашей проблемы? – soommy12

+1

См. Этот ответ https://stackoverflow.com/a/48363886/5559741 – wajeeh