Android 使用腾讯X5浏览器上传图片的示例

目录
  • 1、文件选择
  • 2、实现文件单选
  • 3、举个例子

这几天在客户端接入一个Web页的客服系统,用来接受用户的反馈和建议。Android客户端集成这个客服H5之后,图片死活传递不上去。看了一下iOS同事的集成效果,可以自由上传图片,再把H5的地址用Android原生浏览器打开,也可以正常打开相册上传图片。

What??? 见鬼了, 气抖冷!!!

看了一些博客,使用Android的WebView在默认情况下是不能够支持上传文件的(需要重写 onShowFileChooser方法)。那就只能撸起袖子自己干了。

项目中使用的浏览器内核是腾讯X5浏览器,那就去腾讯X5的技术文档看看有没有实现方式:TBS开发指引, 找了一下发现还真有

1、文件选择

方法一: 文件单选:设置client回调

mWebView.setWebChromeClient(new WebChromeClient() {
  @Override
  public void openFileChooser(
    ValueCallback<Uri> uploadFile,
    String acceptType,
    String captureType) {
    //保存对应的valuecallback供选择后使用
    //通过startActivityForResult启动文件选择窗口或自定义文件选择
  }
});

文件多选:设置client回调

mWebView.setWebChromeClientExtension(new ProxyWebChromeClientExtension() {
  @Override
  public void openFileChooser(
    android.webkit.ValueCallback<Uri[]> uploadFile,
    String acceptType,
    String captureType) {
    //保存对应的valuecallback供选择后使用
    //通过startActivityForResult启动文件选择窗口或自定义文件选择
  }
});

方法二: 设置client回调(单选多选均会回调该接口)

mWebView.setWebChromeClient(new WebChromeClient() {
  @Override
  public boolean onShowFileChooser(
    IX5WebViewBase webView,
    ValueCallback<Uri[]> filePathCallback,
    FileChooserParams fileChooserParams) {
    //保存对应的valuecallback供选择后使用
    //通过startActivityForResult启动文件选择窗口或自定义文件选择
  }
});

然后在activity返回时将用户的选择设置给对应的ValueCallback

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  //如果是文件选择
  if (resultCode == RESULT_OK) {
    //给文件选择的ValueCallback设置onReceiveValue值
  } else if (resultCode == RESULT_CANCELED) {
    //给文件选择的ValueCallback设置null值
  }
}

2、实现文件单选

在项目自定义的WebChromeClient 中,重写openFileChooser方法, 调用项目中图片选择组件,图片选择成功后将生成的uri使用valueCallback回调,即可上传成功

  // 图片单选上传
  @Override
  public void openFileChooser(ValueCallback<Uri> valueCallback, String s, String s1) {
    Log.i(TAG, "openFileChooser: acceptType: " + s + "  captureType: " + s1);

    // 调用项目中图片选择组件
    // 图片选择成功后将生成的uri使用valueCallback回调
    // 即可上传成功

  }
  // 很多博客介绍了, 要写很多Android各个API的兼容代码, 其实不用。 X5在这个方法底层其实实现了兼容各系统的能力,不需要上层开发者来实现。 只需实现这一个方法即可

实现效果:

3、举个例子

为简单起见, 集成一个第三方的图片选择控件

github.com/thewyp/Avat…

集成方式:

dependencies {
        ...
        compile 'me.thewyp:avatar:1.0.4'
      }

使用方式:

new AvatarStudio.Builder(activityContext)
              .needCrop(true)//是否裁剪,默认裁剪
              .setTextColor(Color.BLUE)
              .dimEnabled(true)//背景是否dim 默认true
              .setAspect(1, 1)//裁剪比例 默认1:1
              .setOutput(200, 200)//裁剪大小 默认200*200
              .setText("打开相机", "从相册中选取", "取消")
              .show(new AvatarStudio.CallBack() {
                @Override
                public void callback(String uri) {
                   //uri为图片路径
                   Picasso.with(activityContext).load(new File(uri)).into(mImageView);
                }
              });

实现Web上传图片

public class WebChromeClientImpl extends WebChromeClient {
  ......
    // 图片单选上传
  @Override
  public void openFileChooser(ValueCallback<Uri> valueCallback, String s, String s1) {
    Log.i(TAG, "openFileChooser: acceptType: " + s + "  captureType: " + s1);

    new AvatarStudio.Builder(context)
      .needCrop(true)//是否裁剪,默认裁剪
      .setTextColor(Color.BLUE)
      .dimEnabled(true)//背景是否dim 默认true
      .setAspect(1, 1)//裁剪比例 默认1:1
      .setOutput(200, 200)//裁剪大小 默认200*200
      .setText("打开相机", "从相册中选取", "取消")
      .show(new AvatarStudio.CallBack() {
        @Override
        public void callback(String uri) {
          //uri为图片路径
          valueCallback.onReceiveValue(Uri.parse(uri)); // 将生成的Uri使用valueCallback 回调给X5底层,实现图片上传
        }
      });
  }
  ......
}

至此,图片的上传就实现了。文件的实现也是同理, 大家感兴趣的可以试试

以上就是Android 使用腾讯X5浏览器上传图片的示例的详细内容,更多关于Android 上传图片的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android集成腾讯X5实现文档浏览功能

    Android内部没有控件来直接显示文档,跳转WPS或其他第三方文档App体验性不好,使用腾讯X5内核能很好的解决的这一问题. 一.下载腾讯X5内核 1.前往https://x5.tencent.com/下载Android的内核,新版本的腾讯X5可以直接在bulid.gradle集成 api 'com.tencent.tbs.tbssdk:sdk:43697',如果是在App里集成可以把api换成implementation 2.AndroidStudio导入腾讯X5 a.把下载好的jar包导入

  • Android在项目中接入腾讯TBS浏览器WebView的教程与注意的地方

    腾讯TBS浏览器服务 我们都知道,在Android开发中,经常会用到Webview,而且WebView是出了名的坑的,各种bug.这时候腾讯老哥站出来了,搞了一个TBS浏览器服务这个东西. 说得这么屌,其实就是一个webView控件,然后解析解析网页的内核是他自己做的,叫X5内核(系统原生的WebView用的是WebKit内核),所以我们开发者用的时候,主要就是用这个com.tencent.smtt.sdk.WebView控件 当然这个控件有很多功能,当然也有些要注意的地方. 官网地址:http

  • Android自定义View仿腾讯TIM下拉刷新View

    一 概述 自定义 View 是 Android 开发里面的一个大学问.偶然间看到 TIM 邮箱界面的刷新 View 还挺好玩的,于是就自己动手实现了一个,先看看 TIM 里边的效果图: 二 需求分析 看到上面的动图,大概也知道我们需要实现的功能: 根据拖动的进度来移动小球的位置 小球移动过程的动画 三 功能实现 新建一个 RefreshView 类继承自 View ,然后我们再在 RefreshView 里面新建一个内部实体类: Circle 来看一下 Circle类的代码 #Cirlce.ja

  • 腾讯、百度、华为、搜狗和滴滴Android面试题汇总

    前言:前一段时间和大家交流,据反馈现在Android岗位也没有以前那么多了,当然这不意味着饱和,只是市场更趋于合理一些,Android还有有很多机会的.最近结合一些面试的同学(包含社招和校招),整理了下一些面试题目.实际上,很多面试题网上都能找得到.我整理面试题如下,供大家参考,知道比没知道的好.可以帮大家查漏不缺.以下是(腾讯,百度,华为,搜狗和滴滴 这些厂的面试题) Android基础 View的绘制流程:自定义View如何考虑机型适配:自定义View的事件分发机制:View和ViewGro

  • Android开发腾讯验证码遇到的坑

    我司为响应有关部门的号召,要求新注册的用户必须提供手机号验证.又为了防范有不怀好意之人故意盗刷短信,我司决定接入验证码.经前端同事调研之后,决定接入腾讯验证码.接入过程中还是踩了一些坑,为此特地写这篇文章 致腾讯令人作呕的开发文档 . 腾讯验证码开发指引 我们是Android端开发,服务器端的开发就交给后端同事吧.移动端的开发只需要从我们的后台请求一个url就可以. 移动端开发首先请阅读APP开发指引,接着阅读不同移动平台的API文档.Android开发者直接阅读Android客户端API就好了

  • Android 通过腾讯TBS实现文件预览功能

    1.集成腾讯TBS 使用腾讯TBS来预览pdf,word,excel,ppt等多种类型的文件,去 腾讯浏览服务官网下载SDK,按照官方文档文档集成SDK. 2.使用TbsReaderView来加载文件 动态创建TbsReaderView,然后添加到布局中. // 回调 TbsReaderView.ReaderCallback readerCallback = new TbsReaderView.ReaderCallback() { @Override public void onCallBack

  • Android如何快速集成腾讯Bugly

    目录 1. 新建产品,在官网新建产品 2. 获取app id,点击产品设置,拿到App ID 3. 集成SDK,在Android项目的 app/build.gradle 文件中自动集成SDK 4. AndroidMainfest.xml配置,在 AndroidMainfest.xml 中进行以下配置: 5. 混淆配置,在proguard-rules.pro文件中加入 6. 初始化Bugly 7. 接入完成 腾讯Bugly官方网址bugly.qq.com/ Bugly官方文档bugly.qq.co

  • Android基于腾讯云实时音视频仿微信视频通话最小化悬浮

    最近项目中有需要语音.视频通话需求,看到这个像环信.融云等SDK都有具体Demo实现,但咋的领导对腾讯情有独钟啊,IM要用腾讯云IM,不妙的是腾讯云IM并不包含有音视频通话都要自己实现,没办法深入了解腾讯云产品后,决定自己基于腾讯云实时音视频做去语音.视频通话功能.在这里把实现过程记录下为以后用到便于查阅,另一方面也给有需要的人提供一个思路,让大家少走弯路,有可能我的实现的方法不是最好,但是这或许是一个可行的方案,大家不喜勿喷.基于腾讯云实时音视频SDK 6.5.7272版本,腾讯DEMO下载地

  • Android实现视频播放--腾讯浏览服务(TBS)功能

    TBS视频播放 TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ts, ogv, m3u8, asf, wmv, rm, rmvb, mov, mkv等18种视频格式.同时支持硬件解码,使得内存占用,稳定性相较于系统播放器都更优. 接入TBS 1.导入jar文件和so文件 官网SDK下载地址:https://x5.tencent.com/tbs/sdk.html,示例中有jar文件和so文件,具体导入方式我上一篇文章有详细介绍(Andro

  • iOS Crash常规跟踪方法及Bugly集成运用详细介绍

    iOS Crash常规跟踪方法及Bugly集成运用 当app出现崩溃, 研发阶段一般可以通过以下方式来跟踪crash信息 #1.模拟器运行, 查看xcode错误日志 #2.真机调试, 查看xcode错误日志 #3.真机运行, 查看device系统日志 下面举例说明, 先写一段会Crash的代码crashdemo: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view

随机推荐