<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 项目中有这样一个需求:打开某份邮件,在邮件下载显示完毕后对正文中插入的图片加密;再次打开邮件先解密,保证邮件正文中的图片可以正常显示,在此之后再次加密,避免用户直接在rom中打开图片</span>
写了一个demo,思路是webview加载数据,显示完毕后对图片加密,下次加载数据前解密,显示完毕后再次加密
闲话少叙,上代码:
重写WebView,命名为MyWebView.java
package com.itheima38.demo;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebView;
public class MyWebView extends WebView{
private boolean isRendered = false;
interface DisplayFinish{
void After();
}
DisplayFinish df;
public void setDf(DisplayFinish df) {
this.df = df;
}
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyWebView(Context context) {
super(context);
}
//onDraw表示显示完毕
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(!isRendered && null!=df && getContentHeight()>0)
{
Log.d("MyWebView", "getContentHeight():"+getContentHeight());
df.After();
isRendered = true;
}
}
}
act_b.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<!-- <Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b1" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b2" />
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b3" /> -->
<com.itheima38.demo.MyWebView
android:id="@+id/my_webview"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginTop="200dp" />
</LinearLayout>
ActB.java
package com.itheima38.demo;
import com.itheima38.demo.MyWebView.DisplayFinish;
import com.itheima38.demo.R;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;
public class ActB extends Activity
{
private Button btn1;
private Button btn2;
private Button btn3;
private MyWebView myWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.act_b);
//======网页显示完毕
myWebView = (MyWebView)findViewById(R.id.my_webview);
myWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
myWebView.setDf(new DisplayFinish(){
@Override
public void After()
System.out.println("页面显示完毕");
//图片加密
}
});
}
});
String baseUrl = Environment.getExternalStorageDirectory().getAbsolutePath() + "/abc/";
System.out.println("baseUrl="+baseUrl);// baseUrl=/storage/emulated/0/abc/
String data = "<html><head><title>test</title></head><body>白日依山尽<br />黄河入海流<br />欲穷千里目<br />更上一层楼<br /><img src='file://"+baseUrl+"test.png' /></body></html>";
myWebView.loadDataWithBaseURL(baseUrl, data, "text/html", "utf-8", null);
}
}