====== 网页渠道集成 ====== 网页插件配置方式升级。支持在客服工作台创建多个网页插件,分别设置每个网页插件的功能,并对网页聊天窗口的实际效果进行预览。 ===== 介绍 ===== 网页插件支持管理员直接设置聊天窗口的各种功能并预览;(注:旧版网页插件已停止维护,如您仍在使用,请尽快联系我们为您免费升级至新版网页插件。 === 新版网页插件 === 新版网页插件有如下特点: * 多个网页插件:支持添加多个网页插件,并设置不同的功能,用于不同的网页。 * 极简集成:支持在客服工作台设置网页插件的UI、功能,只需在您的网页添加一行代码即可。 * 效果预览:支持随时预览网页插件的实际效果。 * 兼容性:兼容旧版网页插件的代码集成方式,升级新版后,不影响已有的网页聊天窗口功能。 {{:cs:releasenote:渠道管理-网页插件.png?nolink|渠道管理-网页插件}} ===== 前提条件 ===== 网页插件依赖环信客服云中的APP关联收发消息。 * 对于在kefu.sh.absoloop.com注册的用户:环信已为您创建了一个隐藏的“体验关联”,直接在您的网页添加JS代码,就可以实现与客服云对接。 * 对于其他用户(多租户系统的用户):请您登录环信客服云后,选择“管理员模式 > 渠道管理 > 手机APP”,在该页面依次点击“添加APP关联”和“快速创建”,环信将为您创建一个APP关联。该关联可以作为网页访客端收发消息的通道,也可用于APP渠道集成。 ===== 设置网页插件 ===== 可以在客服工作台设置网页插件的接入方式、样式设置、功能设置、信息栏设置。除特殊说明外,以下设置对PC端、移动端聊天窗口和H5网页均生效。 ==== 接入方式 ==== 支持集成网页插件和集成网页链接两种方式。 === 方式1:集成网页插件 === 在“管理员模式 > 渠道管理 > 网页 > 接入方式”页面,将网页插件的代码复制并粘贴到您的网站的
标签内或者其之后。 在您的网站上插入代码示例(请将configId换成您自己租户上的h5渠道对应的configId值):
最简集成完成Demo样例如下:
配置示例:
环信客服云-h5渠道最简接入Demo
=== 方式2:集成网页链接 ===
您可以直接将h5网页的链接挂载在您现有的网站上,可通过a链接或者按钮等绑定,当访客点击按钮或链接时,即可打开我们的网页访客端,通过这种网页链接的方式将客服聊天页面快速便捷地集成到您到网站。
网页链接示例:
https://kefu.sh.absoloop.com/webim/im.html?configId=c612d953-f3a9-4aaa-aab7-c027cbebc1b2
最简集成完成Demo样例如下:
配置示例:
环信客服云-h5渠道最简接入Demo
联系客服
注意:
- en-US区分大小写。
- 如果您有关于参数加密传输的安全合规要求,请联系我们商务,为您做定制化的加密传输方案。
==== 样式设置 ====
=== 广告栏设置 ===
文本模式:
开关开启,可以设置广告消息,并展示在聊天窗口。
{{:cs:300visitoraccess:admin-channel-web10.png?nolink|信息栏(文本)}}
导航菜单模式:
支持将文本信息栏切换为自定义导航菜单,并展示在聊天窗口。自定义导航菜单包含一级菜单和二级菜单,可创建最多3个一级菜单,每个一级菜单下可创建最多5个二级菜单。可在菜单上设置图文消息(从素材库选择),当访客点击菜单项时,自动向访客发送对应的图文消息。
开关打开时,同时将访客对导航菜单的选择作为轨迹消息发送给客服,并创建会话。
{{:cs:300visitoraccess:admin-channel-web13.png?nolink|信息栏(自定义导航菜单)}}
访客端示例(导航菜单显示在聊天窗口上方):
{{:cs:300visitoraccess:admin-channel-web14.png?nolink|导航菜单示例}}
注:自定义导航菜单为企业版、旗舰版功能。
=== 企业形象展示位 ===
开关开启,可以设置企业品牌广告,并展示在聊天窗口。
{{:cs:300visitoraccess:admin-channel-web11.png?nolink|企业形象展示}}
=== 选择主题风格 ===
选择聊天窗口和悬浮按钮的颜色主题。
{{:cs:300visitoraccess:admin-channel-web12.png?nolink|主题风格}}
=== H5网页标题 ===
设置H5网页在浏览器页签中显示的名称。
注:该功能只对H5网页生效。
=== 自动邀请 ===
开关开启,网页访客端可自动弹出邀请窗口,邀请访客加入会话。
配置窗口可配置邀请机制及邀请样式。
{{:cs:releasenote:图片1.png?nolink&850|}}
快联系我
⚠️注意:当设置 hide 为 true 时,建议同时设置 autoConnect 为 true,以便访客端聊天窗口最小化时,收到新消息提醒。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|hide|Boolean|否|是否隐藏小的悬浮按钮,默认值:false(不隐藏)|
|autoConnect|Boolean|否|自动连接,例如:false|
==== 设置聊天窗口 ====
支持设置“联系客服”按钮的文字、聊天窗口的尺寸和位置。
配置示例:
注:设定的“联系客服”按钮的文字、聊天窗口的尺寸和位置,仅PC端浏览器生效。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|buttonText|String|否|设置小按钮的文案,例如:'联系客服'|
|dialogWidth|String|否|聊天窗口宽度,默认值:'360px'|
|dialogHeight|String|否|聊天窗口高度,默认值:'550px'|
|dialogPosition|Object|否|聊天窗口初始位置,坐标以视口右边距和下边距为基准,默认值:{ x: '10px', y: '10px' }|
展示样式:
{{:cs:300visitoraccess:环信客服云-按钮方式集成.jpg?nolink&1000|}}
==== 指定技能组 ====
为聊天窗口指定技能组,使客户发起的会话分配到该技能组进行接待。
特殊说明:
1、“指定客服”比“指定技能组”的优先级高。
2、若同时指定客服和技能组,则会话分配给指定的客服。只要指定的客服已登录,无论该客服处于各种状态下,且无论是否配置机器人优先接待,此会话均会强制直接分配给此客服接起。
3、对应的指定客服处于未登录状态下,该会话依然会被正常创建并指向给该坐席。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|agentName|String|否|指定客服,例如:'kefu@123.com'|
==== 显示访客信息 ====
当访客发起咨询时(前提为已登录用户),网站可自动将该用户信息(如名称、手机、邮箱、QQ 等)发送给客服,并显示在聊天窗口右侧。
管理员模式 >设置 > 功能设置 >允许访客端修改客户信息 要打开,nickName不能为空。
配置示例:
**注意:**
* 若再次更新 visitor 字段信息,需要访客端清除浏览器 cookie 才能正确显示更新后的用户信息。
* 在会话过程中,如果客服对访客的资料进行了编辑,则显示客服编辑后的访客资料。
* ‘tags’字段可标出VIP用户,其值可以为零到多个。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|visitor|Object|否|访客信息|
==== 自定义字段传参集成用户信息 ====
配置示例
获取用户Token:根据username和password获取access_token。
* Path(默认使用客服快速关联appkey):
* https://a1-vip5.easemob.com/orgName/appName/token(客服快速关联appkey)
* https://a1.easemob.com/orgName/appName/token(北京集群);
* HTTP Method:POST
* Request Headers: Content-Type=application/json
Request body:
{
"grant_type":"password",
"username":"user",
"password":"pwd"
}
Response示例
{
"access_token": "YWMtI5JsbKhHEem57CF4KOxCxnljbbBGLhHpjpSjqzuD_CB4YttqkNER6YIJEZ8gpOpaAwMAAAFr_hTkLQBPGgB7xNZ6-mjCRkn_nivCNcB01uiyS9Yt9pdiU_6LH579zA",
"expires_in": 5184000,
"user": {
"uuid": "7862db6a-90d1-11e9-8209-119f20a4ea5a",
"type": "user",
"created": 1560756495382,
"modified": 1560765534117,
"username": "test1",
"activated": true,
"device_token": "Getg6CgqFanQ4dwAvn9/qxoa5crWpNSkiVFcVt3eDr1S6xqz5X2sm0dbi1yNAQsl",
"notifier_name": "2882303761517507836"
}
}
发送轨迹消息,请参考下文示例:
订单/轨迹消息在PC端浏览器里展示样式如下所示:
{{:cs:300visitoraccess:客服云-访客端-订单和轨迹消息-pc.jpg?nolink|}}
订单/轨迹消息在手机端浏览器里展示样式如下所示:
{{:cs:300visitoraccess:客服云-访客端-订单和轨迹消息.jpg?nolink|}}
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|onready: function () { }|Function|否|聊天窗口加载成功回调|
|onmessage: function ( message ) { }|Function|否|收消息回调,只对当前打开的聊天窗口有效,当访客收到来自系统消息、机器人消息、坐席消息均会触发此回调|
|onsessionclosed: function () { }|Function|否|会话结束事件回调|
|onsessioncreat: function () { }|Function|否|会话创建事件回调|
注意事项:
- 订单消息或者轨迹消息里如果某个字段不需要,直接去掉该字段即可,例如不需要消息可点击,则去掉“item_url”字段即可;
- 订单消息和轨迹类型消息是两种类型消息,其字段和标识是不一致的,请注意区分;
- 默认H5访客端是看不到自己发送的轨迹消息的,如果需要让访客自己看到,则需要在管理员模式》设置》在线客服》功能设置》访客端里开启下访客端显示订单轨迹的开关,如下所示:
- 如果您在对接过程中还有疑问或者问题,请联系我们的商务或CSM为您提供服务支持!
{{:cs:300visitoraccess:20240808-客服云-访客发送轨迹开关显示.png?nolink|}}
==== 访客端自动/手动弹窗 ====
此功能可以实现访客进入聊天页面时,自动弹出例如订单列表弹窗,当访客不需时可以关闭弹窗,也可以在会话过程中,访客自行打开弹窗,点击弹窗内容实现消息上屏等操作,弹窗iframe支持动态传参、自行控制初始打开或关闭等多种操作。(注:iframe页面内部显示内容需业务系统自行开发,如有需要请联系环信商务人员为您提供对接技术支持。)
==== 支持业务标识路由 ====
访客端在集成时候在easemob.config里增加字段 routingRuleFlag:""
配置示例:
easemobim.config ={
//增加业务标识路由字段
configId: '84a85315-4ce7-4f5c-8fac-17e0bccbece0',
routingRuleFlag:"测试的业务标识路由",
}
客服系统侧业务标识路由规则配置:
{{:cs:300visitoraccess:环信客服云-业务标识对应.jpg?nolink|}}
==== 访客端直接渲染聊天页面 ====
1、如果您希望访客进入到你们系统中以后,当需要发起聊天后,可以直接进入到聊天详情页,跳转事件和时机由你们自由控制,且访客退出聊天页面时,可以自由返回到任何的你们指定的页面,那么我们也提供这种场景下的集成
配置示例:
JS方式集成H5访客端直接渲染内容
注意事项:
- 此种方式集成的核心就是一定确保configId的绑定事件,一定要在easemob.js加载完成之后,开始执行,不然会引发绑定异常,从而导致页面加载失败。
- 上述demo里包含有页面直接渲染大小控制、访客自定义身份传参、访客进线自动发送订单或轨迹消息等功能
- 此种集成方式,本部分代码需要放在您自己的服务器页面上,访客进入此页面后,将直接渲染聊天窗发起沟通
- 关于网页渠道集成的更多问题,欢迎您随时咨询我们,我们将为您提供及时的帮助!
===== 高级功能(H5网页) =====
在基础设置和样式显示设置的基础上,还可以为H5网页配置以下高级功能。
==== 指定客服 ====
在H5网页地址中指定客服,使客户发起的会话均由该客服接待。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&agentName=kefu@123.com
注:“指定客服”比“指定技能组”的优先级高。若同时指定客服和技能组,则会话分配给指定的客服。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|agentName|String|否|指定客服,例如:'kefu@123.com'|
==== 隐藏键盘图标 ====
H5网页右上角默认有一个键盘图标,用于切换输入框的位置。如不需要该功能,可将图标隐藏。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&hideKeyboard=true
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|hideKeyboard|Boolean|否|是否隐藏H5右上角的键盘图标,默认值:false(不隐藏)|
==== 获取微信公众号的粉丝信息 ====
当前,微信的H5页面,并不会传微信公众号信息到客服端,所以客服端显示的访客ID是webim id(环信ID)。
如果您需要H5页面将微信的openid等公众号信息传至客服端,使客服端显示的访客ID包含微信的openid,可以配置参数wechatAuth=true和appid={appid}。其中,appid为微信公众号的ID。
配置示例:
https://kefu.sh.absoloop.com/webim/im.html?configId={configId}&wechatAuth=true&appid=wx1e7ed77036581061
注意:当您配置wechatAuth和appid这两个参数时,还需要在客服云的“管理员模式 > 渠道管理 > 微信”页面通过授权的方式绑定您的微信公众号。
参数解释:
^参数^类型^必选^描述^
|configId|String|是|设置为您的网页插件页面显示的configId的值|
|wechatAuth|Boolean|否|是否获取微信授权,例如:true|
|appid|String|否|微信公众号的ID,例如:'wx1e7ed77036581061'|
===== 定制开发模式支持的配置项 ====
使用定制开发模式时,“管理员模式 > 渠道管理 > 网页”页面上,“网页插件”(与configId对应)的配置对桌面网页和移动端网页的聊天窗口依然生效。额外可配置的参数如下表。
如果您的网页支持在移动端浏览,访客在移动端点击“联系客服”按钮会生成H5网页,该H5网页支持的参数也如下表所示。
^参数^类型^必选^描述^桌面网页是否支持^移动端网页是否支持^
|configId|String|是|设置为您的网页插件页面显示的configId的值|是|是|
|domain|String|否|环信客服云域,必须配置为'%%//%%kefu.sh.absoloop.com'|是|是|
|agentName|String|否|指定坐席,例如:'kefu@123.com'|是|是|
|user|Object|否|用户信息,用于集成用户体系|是|是|
|visitor|Object|否|访客信息|是|是|
|language|String|否|访客端展示语言,不填写时默认为中文,例如需要英文展示传en即可|是|是|
|autoConnect|Boolean|否|自动连接,例如:false|是|是|
|buttonText|String|否|设置小按钮的文案,例如:'联系客服'|是|是|
|hide|Boolean|否|是否隐藏小的悬浮按钮,默认值:false(不隐藏)|是|是|
|hideKeyboard|Boolean|否|是否隐藏H5右上角的键盘图标,默认值:false(不隐藏)|否|是|
|dialogWidth|String|否|聊天窗口宽度,默认值:'360px'|是|否|
|dialogHeight|String|否|聊天窗口高度,默认值:'550px'|是|否|
|dialogPosition|Object|否|聊天窗口初始位置,坐标以视口右边距和下边距为基准,默认值:{ x: '10px', y: '10px' }|是|否|
|onmessage: function ( message ) { }|Function|否|收消息回调,只对当前打开的聊天窗口有效,,当访客收到来自系统消息、机器人消息、坐席消息均会触发此回调|是|是|
|onready: function () { }|Function|否|聊天窗口加载成功回调|是|是|
|onopen: function () { }|Function|否|聊天窗口打开回调|是|是|
|onclose: function () { }|Function|否|聊天窗口关闭回调|是|是|
|onsessioncreat: function () { }|Function|否|会话创建事件回调,例如访客发送首条消息后会话成功建立起来后会触发此回调事件|是|是|
|onsessionclosed: function () { }|Function|否|会话结束事件回调|是|是|
|onEvaluationsubmit:function(){}|Function|否|满意度评价提交回调|是|是|
===== APP里通过WebView集成h5访客端 ====
- 如果您想直接在app里嵌入我们的h5访客端页面,以最小的技术投入和最快的时间来实现快速投放给用户使用,我们也支持此种方式集成来满足您的使用,不过需要注意的是由于app端嵌入的h5页面,当需要使用到图片、视频等文件的上传功能时,app端会有对应的限制,需要您对集成部分的代码做下改造才能保证文件上传的功能可正常使用:
- 我们为您提供了一个基于java语言的demo文件,方便您了解如果进行集成,WebViewActivity.java文件代码如下:
package com.example.zarah.testmyself;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.JsResult;
import android.webkit.PermissionRequest;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.TextView;
import java.io.FileInputStream;
public class WebViewActivity extends Activity {
public ValueCallback mUploadMessage;
public ValueCallback mUploadMessageForAndroid5;
public final static int FILECHOOSER_RESULTCODE = 1;
public final static int FILECHOOSER_RESULTCODE_FOR_ANDORID_5 = 2;
ProgressDialog progressBar;
private WebView webview;
private ImageButton btnBack;
private TextView titleBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
initView();
}
private void initView() {
webview = findViewById(R.id.webview);
titleBar = findViewById(R.id.title);
btnBack = findViewById(R.id.back);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
progressBar = new ProgressDialog(this);
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
webview.getSettings().setJavaScriptEnabled(true);
// webview.addJavascriptInterface();//本地java对象映射给js调用
webview.getSettings().setAppCacheEnabled(false);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
// 设置可以支持缩放
webview.getSettings().setSupportZoom(true);
// 设置出现缩放工具
webview.getSettings().setBuiltInZoomControls(true);
//扩大比例的缩放
webview.getSettings().setUseWideViewPort(true);
//自适应屏幕
webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webview.loadUrl("https://kefu.easemob.com/webim/im.html?configId=14bdb04a-bdea-45f5-8560-a2656b4dd7be");
// webview.reload();
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
// Log.e("WebviewActivity",request+"");
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
//提示错误
}
});
webview.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
//实现下载
//跳转浏览器下载,也可以自己去实现下载类去下载
Uri uri = Uri.parse("");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onPermissionRequest(final PermissionRequest request) {
WebViewActivity.this.runOnUiThread(new Runnable(){
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void run() {
request.grant(request.getResources());
}
});
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
//title显示
// if(title.equals("kefu.easemob.com/webim/im.html?configId=14bdb04a-bdea-45f5-8560-a2656b4dd7be"))
titleBar.setText(title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
}
super.onProgressChanged(view, newProgress);
}
//扩展支持alert事件
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("提示").setMessage(message).setPositiveButton("确定", null);
builder.setCancelable(false);
builder.setIcon(R.mipmap.ic_launcher);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();
return true;
}
//扩展浏览器上传文件
//3.0++版本
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {
openFileChooserImpl(uploadMsg);
}
//3.0--版本
public void openFileChooser(ValueCallback uploadMsg) {
openFileChooserImpl(uploadMsg);
}
public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {
openFileChooserImpl(uploadMsg);
}
// For Android > 5.0
public boolean onShowFileChooser(WebView webView, ValueCallback uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) {
openFileChooserImplForAndroid5(uploadMsg);
return true;
}
});
}
private void openFileChooserImpl(ValueCallback uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
}
private void openFileChooserImplForAndroid5(ValueCallback uploadMsg) {
mUploadMessageForAndroid5 = uploadMsg;
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("image/*");
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDORID_5);
// Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动系统相机
// Uri photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png")); // 传递路径
// intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);// 更改系统默认存储路径
// startActivityForResult(intent, FILECHOOSER_RESULTCODE_FOR_ANDORID_5);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (webview.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
//获取历史列表
WebBackForwardList mWebBackForwardList = webview.copyBackForwardList();
//判断当前历史列表是否最顶端,其实canGoBack已经判断过
if (mWebBackForwardList.getCurrentIndex() > 0) {
webview.goBack();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDORID_5) {
FileInputStream fis = null;
String path = Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png";
//
if (null == mUploadMessageForAndroid5)
return;
// try {
// fis = new FileInputStream(Environment.getExternalStorageDirectory().getPath()+ "/" + "temp.png");
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
Uri result = (intent == null || resultCode != RESULT_OK) ? null : intent.getData();
if (result != null) {
mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
} else {
mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
}
mUploadMessageForAndroid5 = null;
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {//定义一个Handler, 用于处理下载线程与UI间通讯
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case 0:
progressBar.show();//显示进度框
break;
case 1:
progressBar.hide();//隐藏进度对话框不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动
break;
}
}
super.handleMessage(msg);
}
;
};
}