Hacemos una verificación profunda cada uno de los posts de nuestro espacio con el objetivo de mostrarte en todo momento la información veraz y actual.
Ninguna de las soluciones anteriores funcionó para mí en Android 4.2.2. Así que investigué el código fuente del navegador web predeterminado de Android. Extraje la solución a este problema exacto: obtenga la URL del enlace del enlace de la imagen.
Fuente: https://github.com/android/platform_packages_apps_browser/blob/master/src/com/android/browser/Controller.java
Solución extraída:
Oyente LongClick:
...
mWebview.setOnLongClickListener(new OnLongClickListener()
@Override
public boolean onLongClick(View v)
HitTestResult result = mWebview.getHitTestResult();
if (result.getType() == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
Message msg = mHandler.obtainMessage();
mWebview.requestFocusNodeHref(msg);
);
...
Manejador para obtener la URL:
private Handler mHandler = new Handler()
@Override
public void handleMessage(Message msg)
// Get link-URL.
String url = (String) msg.getData().get("url");
// Do something with it.
if (url != null) ...
;
Sé que este es un problema antiguo, pero recientemente me encontré con este problema. Según la respuesta de Perry_ml, utilicé el siguiente código de Kotlin para resolverlo:
webView.setOnLongClickListener
val result = webView.hitTestResult
if (result.type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
val handler = Handler()
val message = handler.obtainMessage()
webView.requestFocusNodeHref(message)
val url = message.data.getString("url")
// Do something with url, return true as touch has been handled
true
else
false
He publicado algo de información al respecto aquí.
Revisé el código fuente de WebView y parece que la imagen uri es el único dato adicional que puede obtener para SRC_IMAGE_ANCHOR_TYPE. Pero no te enojes aquí, tengo una solución rápida y sucia para ti:
webview.setOnLongClickListener(new OnLongClickListener()
@Override
public boolean onLongClick(View v)
final WebView webview = (WebView) v;
final HitTestResult result = webview.getHitTestResult();
if(result.getType()==HitTestResult.SRC_IMAGE_ANCHOR_TYPE)
webview.setWebViewClient(new WebViewClient()
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
// 2. and here we get the url (remember to remove the WebView client and return true so that the hyperlink will not be really triggered)
mUrl = url; // mUrl is a member variant of the activity
view.setWebViewClient(null);
return true;
);
// 1. the picture must be focused, so we simulate a DPAD enter event to trigger the hyperlink
KeyEvent event1 = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER);
webview.dispatchKeyEvent(event1);
KeyEvent event2 = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER);
webview.dispatchKeyEvent(event2);
// 3. now you can do something with the anchor url (and then clear the mUrl for future usage)
String url = mUrl;
if (url!=null)
Toast.makeText(webview.getContext(), url, Toast.LENGTH_SHORT).show();
mUrl = null;
return false;
);
Probé el código en un dispositivo Android 2.1 de gama baja y en un dispositivo Android 4.0 de gama alta, ambos funcionan de maravilla.
Saludos
Ziteng Chen
Si tienes algún duda y disposición de aclarar nuestro ensayo te invitamos realizar una nota y con mucho placer lo ojearemos.