android - 如何在长按中从网页视图中获取 URL?
问题描述
我有一个网络视图,当用户长按链接时,我想获取 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()")
}
但是这样一来,在一些像谷歌这样的搜索引擎中,就不会返回一个 URL。这是我长时间点击谷歌搜索结果时的日志:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA+klEQVR4AWMgBnwr4pRloAR8KuA89KmAK4V8A/LZ1YGGvPiQy65MtCaQjR8LuDxh/M8FXNlAQ078D2VgJs6APE6rjwWcj4CaOkGaIIZybPucz1FHvCuyeYVBmkBhAArIL6XcEiCvfCzkNMOpCeRPoPMXgFyACAPOcnAYFLK7fSrkDAR6rQmnAe/KBfmBNhQCDbkGtP0yyO8gsU+FHLYgL4EClGgvgDR9zudcCrT9PchVX4q49YmKc5AmkLNBsQDyOygsQK4iygCQoo8FHLGg0AcFIDQm3gPpvXg1zlu88j++2ACFPB51CAmgbf9xYcIGEAAEDSAWM1ATAAC4CbdSzzGZLwAAAABJRU5ErkJggg==
我从 GitHub 下载了一个Web 浏览器开源。在这个项目中,程序员这样做并且这是有效的:
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 的另一种方法吗?
解决方案
终于,几天后,我找到了解决方案。请尝试这种方式:
@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);
}
推荐阅读
- c++ - 是否有复制存储在二维数组中的相邻像素值的算法?
- java - 使用spring boot data redis模板得到空指针错误
- reactjs - 我如何在旋转木马上制作动画/移动图像以做出反应。哪种格式最好?
- javascript - 当我尝试搜索时,我的 jekyll/github 网站出现错误
- dc.js - 没有过滤器应用于 DC.js 图表时的条件自定义 X 值暗淡名称
- css - 向材料表中的列添加特定的最小宽度
- kotlin - Kotlin 适配器声明问题:类型不匹配:推断类型是 MyTabAdapter 但 RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!>?预计
- typescript - 使用 Typescript 初始化 Text.defaultProps
- node.js - 如何针对特定平台定位节点应用程序
- java - 使用银行App切换功能出错