建立一個MyWebViewClient的Class file
在裡面的shouldOverrideUrlLoading方法中可以攔截到<a href="XXXXXX">中href指向的位址=>放在url!
檔案內容如下:
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.net.Uri;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/** * Created by ray on 2016/5/14. */
public class MyWebViewClient extends WebViewClient {
private Context context;
public MyWebViewClient(Context context) {
this.context = context;
}
@Override public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if(url.contains(".pdf") || url.contains(".doc"))
{
//處理取得純檔名(過濾掉路徑)
String[] fa = url.split("/");
String filename = fa[fa.length-1];
//將檔案從assets複製到SD card或手機內部儲存空間
InputStream in = null;
OutputStream out = null;
AssetManager assetManager = this.context.getAssets();
try {
in = assetManager.open("app-land/file/"+filename);
//注意路徑的前面不要有/
File outFile = new File(this.context.getExternalFilesDir(null), filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
} catch(IOException e) {
Log.e("tag", "Failed to copy asset file: " + filename, e);
}
finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// NOOP }
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
// NOOP }
}
}
//呼叫開啟詢問怎麼打開這個文件
Intent intent = new Intent( Intent.ACTION_VIEW );
File ff = new File(this.context.getExternalFilesDir(null)+"/"+filename);
intent.setDataAndType(Uri.fromFile(ff), "application/*" );
this.context.startActivity(intent);
return true;
}
else if(url.contains("http"))
{
//開啟外部網址的處理
Uri uriUrl = Uri.parse(url);
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
this.context.startActivity(launchBrowser);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
private void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1)
{
out.write(buffer, 0, read);
}
}
}
----------------------------------------------------
在MainActivity.java中的WebView部分程式加入以下的設定:
mAppWebView = (WebView) findViewById(R.id.webView);
mAppWebView.getSettings().setJavaScriptEnabled(true);
mAppWebView.getSettings().setSaveFormData(true);
mAppWebView.getSettings().setDatabaseEnabled(true);
mAppWebView.getSettings().setDomStorageEnabled(true);
mAppWebView.getSettings().setSupportZoom(true);
mAppWebView.getSettings().setAllowFileAccess(true);
mAppWebView.getSettings().setAllowContentAccess(true);
mAppWebView.setWebViewClient(new MyWebViewClient(this));//這一行!
mAppWebView.loadUrl(mAppURL);
---------------------------------------------------
最後是要在AndroidManifest.xml增加permission:
</application> <---放在這一行的後面哦!
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
沒有留言:
張貼留言