Как получить URL-адрес из ссылок с длинным кликом в веб-просмотре?

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

webView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(final View v) {

            WebView webView1 = (WebView) v;
            WebView.HitTestResult hitTestResult = webView1.getHitTestResult();
            Log.i("LinkClicked", hitTestResult.getExtra());

            return false;
        }
    });

С помощью этого кода при длительном нажатии на ссылки на таких веб-сайтах, как stackoverflow, журнал будет выглядеть следующим образом:

https://stackoverflow.com/questions

все ок, но при долгом клике по результатам поиска гугл лог вот такой:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAJFBMVEVHcEz/AAD/AAD/AAD/AAD/AAD/AAD/AAD/g4P/////KCj/7e0I8rGvAAAAB3RSTlMAT0g5Ggp+EilkVQAAAENJREFUGJVjYCAGsDAzggEzC5jLxo4E2BgYWNlRACsDM5jmggkwMzCBaQ5uqBATTICTk4OAAEILhqEY1mI4DNPphAAASIsES4gsgWgAAAAASUVORK5CYII=

он не возвращает ссылку. Как я могу это исправить?


person Martin Bigot    schedule 07.03.2020    source источник
comment
Отвечает ли это на ваш вопрос? Получить щелкнутый URL-адрес в веб-представлении в Android   -  person VikaS GuttE    schedule 07.03.2020
comment
@VikaSGuttE при использовании метода shouldOverrideUrlLoading в setOnLongClickListener ничего не регистрирует.   -  person Martin Bigot    schedule 07.03.2020
comment
попробуйте мой ответ ниже   -  person VikaS GuttE    schedule 07.03.2020


Ответы (1)


public class MainActivity extends AppCompatActivity {

    WebView webView;
    String URL1 = "https://stackoverflow.com/questions/60577403/how-to-get-url-from-long-click-links-in-a-webview/60577736?noredirect=1#comment107173847_60577736";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webview);

        webView.clearHistory();
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setWebViewClient(new WebViewClient() {

            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            }

            public void onPageFinished(WebView view, String url) {

            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                URL1 = url;
                return super.shouldOverrideUrlLoading(view, url);
            }
        });
        webView.loadUrl(URL1);
        // Register the context menu for web view
        registerForContextMenu(webView);
    }

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

        // Get the web view hit test result
        final WebView.HitTestResult result = webView.getHitTestResult();

        // If user long press on url
        if (result.getType() == WebView.HitTestResult.ANCHOR_TYPE ||
                result.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {

            // Set the title for context menu
            menu.setHeaderTitle("\t\t\t\t\t\t\t\t\t\t ◦ ◉ ⦿ Select ⦿ ◉ ◦ \t");

            // Add an item to the menu
            menu.add(0, 1, 0, " \t \t➤\t Show URL")
                    .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem menuItem) {
                            String Pressed_url = result.getExtra();
                            Toast.makeText(MainActivity.this, "URL is:-" + Pressed_url,
                                    Toast.LENGTH_SHORT).show();
                            return false;
                        }
                    });
        }
    }
}

Загрузите Полный код с github.

Вывод

Меню URL

person VikaS GuttE    schedule 07.03.2020
comment
это не работает, когда я долго нажимаю на ссылку. просто работайте, когда вы нажимаете на ссылку, и веб-просмотр загружает ссылку. Я хочу, чтобы при длинном щелчке получить URL-адрес и использовать его для контекстного меню, пожалуйста, посмотрите на это: link< /а> - person Martin Bigot; 07.03.2020
comment
@MartinBigot добавил полный код в надежде, что это сработает...! наслаждайтесь кодированием, удачи. - person VikaS GuttE; 07.03.2020
comment
большое большое спасибо! его работа полная и правильная. но все еще не возвращает URL-адрес результатов поиска Google. Ищите что-нибудь на google.com и долго щелкайте по сайту, он возвращает расплывчатую строку. спасибо за Ваше внимание... - person Martin Bigot; 07.03.2020