好的,所以我尝试在我的 webview 活动中显示的网页的按钮单击时捕获 webview,并将其保存到 sd 卡。
我的清单中有写入外部存储的正确权限,并且所有 webview 功能都工作得很好,就在我尝试捕获图像时。
public void onClick(View v) {
switch(v.getId()) {
case R.id.button1:
WebViewClientDemoActivity.web.goBack();
break;
case R.id.button2:
WebViewClientDemoActivity.web.goForward();
break;
case R.id.button3:
WebViewClientDemoActivity.web.capturePicture();
//Capture Picture
Picture picture = WebViewClientDemoActivity.web.capturePicture();
//Create a new canvas
Canvas mCanvas = new Canvas();
//Draw the Picture into the Canvas
picture.draw(mCanvas);
//Create a Bitmap
Bitmap sreenshot = Bitmap.createBitmap(picture.getWidth(),
picture.getHeight(),Config.ARGB_8888);
//copy the content fron Canvas to Bitmap
//mCanvas.drawBitmap(mBitmapScreenshot, 0, 0, null);
mCanvas.drawBitmap(sreenshot, 0, 0, null);
//Save the Bitmap to local filesystem
if(sreenshot != null) {
ByteArrayOutputStream mByteArrayOpStream = new
ByteArrayOutputStream();
sreenshot.compress(Bitmap.CompressFormat.JPEG, 90,
mByteArrayOpStream);
try {
File folder = new File(Environment.getExternalStorageDirectory().toString()+"/Enlighten/Images");
folder.mkdirs();
// create a File object for the parent directory
File outputFile = new File(folder, "enlighten.jpg");
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(mByteArrayOpStream.toByteArray());
fos.close();
Toast.makeText(WebViewClientDemoActivity.this, "File Created", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(WebViewClientDemoActivity.this, "File Not Found", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
我收到此错误消息。(更新)
10-15 11:33:10.336: W/System.err(20577): java.io.FileNotFoundException: /mnt/sdcard/Enlighten/Images/enlighten.jpg: open failed: ENOENT (No such file or directory)
10-15 11:33:10.336: W/System.err(20577): at libcore.io.IoBridge.open(IoBridge.java:406)
10-15 11:33:10.336: W/System.err(20577): at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
10-15 11:33:10.336: W/System.err(20577): at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
10-15 11:33:10.336: W/System.err(20577): at com.jaisonbrooks.enlighten.WebViewClientDemoActivity.onClick(WebViewClientDemoActivity.java:374)
10-15 11:33:10.336: W/System.err(20577): at android.view.View.performClick(View.java:3565)
10-15 11:33:10.336: W/System.err(20577): at android.view.View$PerformClick.run(View.java:14165)
10-15 11:33:10.336: W/System.err(20577): at android.os.Handler.handleCallback(Handler.java:605)
10-15 11:33:10.336: W/System.err(20577): at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 11:33:10.336: W/System.err(20577): at android.os.Looper.loop(Looper.java:137)
10-15 11:33:10.336: W/System.err(20577): at android.app.ActivityThread.main(ActivityThread.java:4517)
10-15 11:33:10.336: W/System.err(20577): at java.lang.reflect.Method.invokeNative(Native Method)
10-15 11:33:10.346: W/System.err(20577): at java.lang.reflect.Method.invoke(Method.java:511)
10-15 11:33:10.346: W/System.err(20577): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
10-15 11:33:10.346: W/System.err(20577): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
10-15 11:33:10.346: W/System.err(20577): at dalvik.system.NativeStart.main(Native Method)
10-15 11:33:10.346: W/System.err(20577): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
10-15 11:33:10.346: W/System.err(20577): at libcore.io.Posix.open(Native Method)
10-15 11:33:10.346: W/System.err(20577): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
10-15 11:33:10.346: W/System.err(20577): at libcore.io.IoBridge.open(IoBridge.java:390)