可能大家都遇到了Android处理办公文件不太方便的问题,先强调一点Android是做不到在线预览的,目前的解决方案都是先下载在打开,这里我提供我常用的两种方案,仅供参考,如有不对的还请批评指正,也欢迎沟通交流。
这中方案是最简单的,直接跳转到我们手机浏览器,浏览器来接管后面用户下载浏览的工作。
情景一
通过一个Button跳转
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(url);//url文件地址
intent.setData(uri);
startActivity(intent);
情景二
今天我们的项目经理的需求,App内部使用WebView打开了一个网页,网页里包含一个文件地址,点击文件链接跳转浏览器
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains(".pdf") || url.contains(".zip") || url.contains(".xls") || url.contains(".doc")) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse(url);
intent.setData(uri);
startActivity(intent);//打开浏览器
return true;
} else {
view.loadUrl(url); // 在当前的webview中跳转到新的url
return false;
}
}
});
这个地方我们需要new 一个WebViewClient给WebView, 在里面去拦截网页跳转事件,当url地址包含文件后缀时跳转到浏览器,否则继续加载该url
TbsSDK是腾讯提供的一种共享X5内核的sdk,只要你的手机安装有QQ浏览器、QQ、VX等腾讯软件就可以共享他们的X5内核功能。官网地址
然后我们这里简单的说一下怎么使用
SDK接入
jar包方式集成 您可将官网下载的jar包复制到您的App的libs目录,并且通过Add As Library的方式集成TBS SDK
Gradle方式集成 您可以在使用SDK的模块的dependencies中添加引用进行集成:
api 'com.tencent.tbs.tbssdk:sdk:43903'
权限配置
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
创建BaseApplication,调用TbsDownloader 的 needDownload(Context context, boolean oversea) 方法,并在Menifest文件中声明BaseApplication。
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
TbsDownloader.needDownload(getApplicationContext(), false);
}
}
添加com.tencent.smtt.sdk.WebView布局
<com.tencent.smtt.sdk.WebView
android:id="@+id/tbs_web_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
使用tbsWebView控件打开文件
HashMap<String, String> params = new HashMap<String, String>();
params.put("style", "1");
params.put("local", "true");
params.put("memuData", jsondata);
QbSdk.openFileReader(ctx,”/sdcard/xxx.doc”, params,callback);
tbsWebView其他使用方式基本与原生WebView相同