Android浏览器直接打开网页上的文档

2022-08-27 17:52:41 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

在做移动办公软件时,需要移动终端在线打开网页上的文档,在iPad上能直接打开文档在线显示,但是在android系统上却不能,它只是把这个文档下载下来,然后只能自己找到文档的位置点击打开,很不方便。没办法,只能自己写个客户端,拦截请求,自动下载和打开。

一:实现思路

二:核心实现

1)主要配置文件

2)核心代码

public class FileOpenTestActivity extends Activity {

private WebView webView;

private Context mContext = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.mContext = this;

webView = (WebView) findViewById(R.id.webview);

webView.getSettings().setJavaScriptEnabled(true);

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

webView.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {

//判断是否是文件下载链接,如果不是则返回,直接访问

String fileName = url.substring(url.lastIndexOf(“/”));

if(null == getFileType(fileName) || getFileType(fileName).equals(“”)){

return false;

}

//如果是文件下载链接,先下载,再调用系统安装的阅读器打开

try {

//下载文件到SD卡

File file = downloadFile(url);

//调用适合的阅读器显示文件

startActivity(getFileIntent(file));

} catch (ActivityNotFoundException e) {

e.printStackTrace();

}

return true;

}

});

webView.loadUrl(“http://localhost:8888/OpenFile/fileList.html“);

}

/**

* 下载文件

* @param fileUrl

* @return

*/

public File downloadFile(String fileUrl) {

File apkFile = null;

String fileName = fileUrl.substring(fileUrl.lastIndexOf(“/”));

try {

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

// 获得存储卡的路径

String sdpath = Environment.getExternalStorageDirectory() “/”;

String mSavePath = sdpath “download”;

URL url = new URL(fileUrl);

// 创建连接

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

conn.connect();

// 获取文件大小

//int length = conn.getContentLength();

// 创建输入流

InputStream is = conn.getInputStream();

File file = new File(mSavePath);

// 判断文件目录是否存在

if (!file.exists()) {

file.mkdir();

}

apkFile = new File(mSavePath, fileName);

if(apkFile.exists()){

return apkFile;

}

FileOutputStream fos = new FileOutputStream(apkFile);

int count = 0;

int numread = 0;

byte buf[] = new byte[1024];

while ((numread = is.read(buf)) != -1) {

fos.write(buf, 0, numread);

}

fos.flush();

fos.close();

is.close();

}

} catch (Exception e) {

e.printStackTrace();

}

return apkFile;

}

/**

* 获取用于文件打开的intent

* @param file

* @return

*/

public Intent getFileIntent(File file)

{

Intent intent = new Intent(“android.intent.action.VIEW”);

intent.addCategory(“android.intent.category.DEFAULT”);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Uri uri = Uri.fromFile(file);

String fileType = getFileType(file.getName());

intent.setDataAndType(uri, fileType);

return intent;

}

/**

* 从配置文件获取要下载的文件后缀和对应的MIME类型

* @param fileName

* @return

*/

public String getFileType(String fileName){

String [] names = this.mContext.getResources().getStringArray(R.array.file_name_array);

String [] types = this.mContext.getResources().getStringArray(R.array.file_type_array);

for(int i=0;i<names.length;i ){

if(fileName.toLowerCase().indexOf(names[i])>=0){

return types[i];

}

}

return “”;

}

}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146616.html原文链接:https://javaforall.cn

0 人点赞