Java Code Examples for com.tencent.smtt.sdk.WebView#HitTestResult

The following examples show how to use com.tencent.smtt.sdk.WebView#HitTestResult . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: EightActivity.java    From YCWebView with Apache License 2.0 5 votes vote down vote up
/**
 * 长按图片事件处理
 */
private boolean handleLongImage() {
    final WebView.HitTestResult hitTestResult = webView.getHitTestResult();
    // 如果是图片类型或者是带有图片链接的类型
    if (hitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE ||
            hitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
        // 弹出保存图片的对话框
        new AlertDialog.Builder(EightActivity.this)
                .setItems(new String[]{"查看大图", "保存图片到相册"},
                        new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String picUrl = hitTestResult.getExtra();
                        //获取图片
                        Log.e("picUrl", picUrl);
                        switch (which) {
                            case 0:

                                break;
                            case 1:
                                break;
                            default:
                                break;
                        }
                    }
                })
                .show();
        return true;
    }
    return false;
}
 
Example 2
Source File: X5WebViewClient.java    From YCWebView with Apache License 2.0 4 votes vote down vote up
/**
 * 这个方法中可以做拦截
 * 主要的作用是处理各种通知和请求事件
 *
 * 不准确的说法如下:
 * 1.返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
 * 2.返回: return true; 表示webView处理url是根据程序来执行的。 返回: return false; 表示webView处理url是在webView内部执行。
 * 3.还有一种错误说法:WebView上的所有加载都经过这个方法。
 *
 * 准确说法,该方法说明如下所示:
 * 若没有设置 WebViewClient 则由系统(Activity Manager)处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
 * 若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理,也就是程序员自己做处理。
 * 若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。
 * @param view                              view
 * @param url                               链接
 * @return                                  是否自己处理,true表示自己处理
 */
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    //页面关闭后,直接返回,不要执行网络请求和js方法
    boolean activityAlive = X5WebUtils.isActivityAlive(context);
    if (!activityAlive){
        return false;
    }
    if (TextUtils.isEmpty(url)) {
        return false;
    }
    url = EncodeUtils.urlDecode(url);
    /*WebView.HitTestResult hitTestResult = null;
    if (url.startsWith("http:") || url.startsWith("https:")){
        hitTestResult = view.getHitTestResult();
    }*/
    final Uri uri = Uri.parse(url);
    //scheme跳转支持
    if (uri!=null && uri.getScheme()!=null && WebSchemeIntent.isSilentType(uri.getScheme())) {
        return WebSchemeIntent.handleSilently(context, uri);
    }
    WebView.HitTestResult hitTestResult = view.getHitTestResult();
    if (hitTestResult == null) {
        return false;
    }
    //HitTestResult 描述
    //WebView.HitTestResult.UNKNOWN_TYPE 未知类型
    //WebView.HitTestResult.PHONE_TYPE 电话类型
    //WebView.HitTestResult.EMAIL_TYPE 电子邮件类型
    //WebView.HitTestResult.GEO_TYPE 地图类型
    //WebView.HitTestResult.SRC_ANCHOR_TYPE 超链接类型
    //WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE 带有链接的图片类型
    //WebView.HitTestResult.IMAGE_TYPE 单纯的图片类型
    //WebView.HitTestResult.EDIT_TEXT_TYPE 选中的文字类型
    if (hitTestResult.getType() == WebView.HitTestResult.UNKNOWN_TYPE) {
        return false;
    }
    boolean handleAlive = WebSchemeIntent.handleAlive(context, uri);
    if (handleAlive){
        return true;
    }
    return super.shouldOverrideUrlLoading(view, url);
}
 
Example 3
Source File: X5WebViewClient.java    From YCWebView with Apache License 2.0 4 votes vote down vote up
/**
 * 增加shouldOverrideUrlLoading在api大于24时
 * 主要的作用是处理各种通知和请求事件
 * 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
 * @param view                              view
 * @param request                           request,添加于API21,封装了一个Web资源的请求信息,
 *                                          包含:请求地址,请求方法,请求头,是否主框架,是否用户点击,是否重定向
 * @return
 */
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    boolean activityAlive = X5WebUtils.isActivityAlive(context);
    if (!activityAlive){
        return false;
    }
    String url = request.getUrl().toString();
    if (TextUtils.isEmpty(url)) {
        return false;
    }
    url = EncodeUtils.urlDecode(url);
    final Uri uri = Uri.parse(url);
    //scheme跳转支持
    if (uri!=null && uri.getScheme()!=null && WebSchemeIntent.isSilentType(uri.getScheme())) {
        return WebSchemeIntent.handleSilently(context, uri);
    }
    /*WebView.HitTestResult hitTestResult = null;
    if (url.startsWith("http:") || url.startsWith("https:")){
        hitTestResult = view.getHitTestResult();
    }*/
    WebView.HitTestResult hitTestResult = view.getHitTestResult();
    if (hitTestResult == null) {
        return false;
    }
    //HitTestResult 描述
    //WebView.HitTestResult.UNKNOWN_TYPE 未知类型
    //WebView.HitTestResult.PHONE_TYPE 电话类型
    //WebView.HitTestResult.EMAIL_TYPE 电子邮件类型
    //WebView.HitTestResult.GEO_TYPE 地图类型
    //WebView.HitTestResult.SRC_ANCHOR_TYPE 超链接类型
    //WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE 带有链接的图片类型
    //WebView.HitTestResult.IMAGE_TYPE 单纯的图片类型
    //WebView.HitTestResult.EDIT_TEXT_TYPE 选中的文字类型
    if (hitTestResult.getType() == WebView.HitTestResult.UNKNOWN_TYPE) {
        return false;
    }
    boolean handleAlive = WebSchemeIntent.handleAlive(context, uri);
    if (handleAlive){
        return true;
    }
    return super.shouldOverrideUrlLoading(view, request);
}
 
Example 4
Source File: SaveImageProcessor.java    From YCWebView with Apache License 2.0 4 votes vote down vote up
private void saveImage(final Context context, final WebView webView) {
    WebView.HitTestResult hitTestResult = webView.getHitTestResult();
    if (hitTestResult == null) {
        Toast.makeText(context, "保存图片失败", Toast.LENGTH_SHORT).show();
        return;
    }
    final String imageUrl = hitTestResult.getExtra();
    if (imageUrl == null) {
        Toast.makeText(context, "保存图片失败", Toast.LENGTH_SHORT).show();
    } else if (imageUrl.startsWith("data:")) {
        File rootImagePath = getImageDir(context);
        if (rootImagePath == null) {
            Toast.makeText(context, "保存图片失败", Toast.LENGTH_SHORT).show();
            return;
        }
        String imageData = imageUrl.replaceFirst("data:image\\/\\w+;base64,", "");
        byte[] imageDataBytes = Base64.decode(imageData, Base64.DEFAULT);
        String fileName = getLocalImgSavePath();
        File imageFile = new File(rootImagePath, fileName);
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(imageFile);
            fileOutputStream.write(imageDataBytes);
            fileOutputStream.close();
            String imagePath = imageFile.getAbsolutePath();
            insertMedia(context, imagePath);
            Toast.makeText(context, "保存图片成功", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(context, "保存图片成功", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    } else {
        ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
        singleThreadPool.execute(new Runnable() {
            @SuppressLint("LongLogTag")
            @Override
            public void run() {
                Bitmap bitmap = returnBitMap(imageUrl);
                android.os.Message message = android.os.Message.obtain();
                message.obj = bitmap;
                handler.sendMessage(message);
            }
        });
    }
}