Как получить URL из веб-просмотра длинным кликом? - PullRequest
1 голос
/ 27 апреля 2020

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

// Register the context menu for web view
registerForContextMenu(webView);

И:

 @Override
 public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    final WebView.HitTestResult result = webView.getHitTestResult();
    Log.i("url is ===" , "result.getExtra()")

 }

Но так, в некоторых поисковых системах, таких как Google , нельзя возвращать URL. Это мой журнал, когда я долго нажал на результатах поиска Google:

данные: изображение / PNG; base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8 / 9hAAAA + klEQVR4AWMgBnwr4pRloAR8KuA89KmAK4V8A / LZ1YGGvPiQy65MtCaQjR8LuDxh / M8FXNlAQ078D2VgJs6APE6rjwWcj4CaOkGaIIZybPucz1FHvCuyeYVBmkBhAArIL6XcEiCvfCzkNMOpCeRPoPMXgFyACAPOcnAYFLK7fSrkDAR6rQmnAe / KBfmBNhQCDbkGtP0yyO8gsU + FHLYgL4EClGgvgDR9zudcCrT9PchVX4q49YmKc5AmkLNBsQDyOygsQK4iygCQoo8FHLGg0AcFIDQm3gPpvXg1zlu88j ++ 2ACFPB51CAmgbf9xYcIGEAAEDSAWM1ATAAC4CbdSzzGZLwAAAABJRU5ErkJggg ==

Я загружаю веб-браузер с открытым исходным кодом из GitHub. В этом проекте Программист делает это, и это работает:

 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    Handler mHandler = new Handler() {
     @Override
        public void handleMessage(Message msg) {
            // Get link-URL.
            String url = (String) msg.getData().get("url");
            Log.i("get url" , url);
        }
    };

Поэтому я пишу этот код в своем приложении, но handleMessage не будет запущен. Нужно ли что-нибудь еще сделать, чтобы использовать handleMessage метод?

Знаете ли вы другой способ получить URL в результатах поиска Google?

1 Ответ

1 голос
/ 30 апреля 2020

Наконец, через несколько дней я нашел решение. Пожалуйста, попробуйте так:

    @Override
    public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    String url = null, imageUrl = null;
    WebView.HitTestResult result = ((WebView) v).getHitTestResult();
    switch (result.getType()) {
        case WebView.HitTestResult.SRC_ANCHOR_TYPE:
            url = result.getExtra();
            break;
        case WebView.HitTestResult.IMAGE_TYPE:
            imageUrl = result.getExtra();
            break;
        case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:
        case WebView.HitTestResult.EMAIL_TYPE:
        case WebView.HitTestResult.UNKNOWN_TYPE:
            Handler handler = new Handler();
            Message message = handler.obtainMessage();
            ((WebView) v).requestFocusNodeHref(message);
            url = message.getData().getString("url");
            if ("".equals(url)) {
                url = null;
            }
            imageUrl = message.getData().getString("src");
            if ("".equals(imageUrl)) {
                imageUrl = null;
            }
            break;
    }
    showLongPressMenu(url, imageUrl);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...