屏幕截图并email

效果图挺恶心,哈哈哈!
[img]
屏幕截图并email
[/img]

布局文件就一个Button
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button_text" />
</LinearLayout>


主要代码如下:
ScreenshotTools
package com.magus.screen;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.view.View;
import android.widget.Toast;

public class ScreenshotTools {

	/***
	 * @author Johnson
	 * 
	 * */

	public static long minSizeSDcard = 50;
	public static String filePath = Environment.getExternalStorageDirectory()
			+ "/FJBICache";
	public static String fileName = "chart.png";
	public static String detailPath = filePath + File.separator + fileName;
	public static final int SEND_EMAIL = 1;

	// public static String detailPath="/sdcard/FjbiCache/chart.png";

	/**
	 * 调用系统程序发送邮件
	 * 
	 * @author Johnson
	 * 
	 * */

	private static void sendEmail(Context context, String[] to, String subject,
			String body, String path) {

		Intent email = new Intent(android.content.Intent.ACTION_SEND);

		if (to != null) {
			email.putExtra(android.content.Intent.EXTRA_EMAIL, to);
		}
		if (subject != null) {
			email.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
		}
		if (body != null) {
			email.putExtra(android.content.Intent.EXTRA_TEXT, body);
		}
		if (path != null) {

			/*
			 * 用email.setType("image/png");或者email.setType(
			 * "application/octet-stream"); 都不会影响邮件的发送
			 * 为什么email.setType("image/png"
			 * );而不用email.setType("application/octet-stream"); ?
			 * 因为在开发中发现setType("image/png"),系统会同时给你调用彩信,邮件,等.....
			 */

			File file = new File(path);
			email.putExtra(android.content.Intent.EXTRA_STREAM,
					Uri.fromFile(file));
			email.setType("image/png");
		}
		context.startActivity(Intent.createChooser(email, "请选择发送软件"));

	}

	/**
	 * 获取指定Activity的截屏,保存到png文件
	 * 
	 * @author Johnson
	 * **/

	private static Bitmap takeScreenShot(Activity activity) {
		// View是你需要截图的View
		View view = activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap b1 = view.getDrawingCache();

		// 获取状态栏高度
		Rect frame = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
		int statusBarHeight = frame.top;
		System.out.println(statusBarHeight);

		// 获取屏幕长和高
		int width = activity.getWindowManager().getDefaultDisplay().getWidth();
		int height = activity.getWindowManager().getDefaultDisplay()
				.getHeight();
		// 去掉标题栏
		// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
		Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height
				- statusBarHeight);
		view.destroyDrawingCache();
		return b;
	}

	/**
	 * 截图保存
	 * 
	 * @author Johnson
	 * **/
	private static void savePic(Bitmap b, String filePath, String fileName) {

		File f = new File(filePath);

		if (!f.exists()) {
			f.mkdir();
		}
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(filePath + File.separator + fileName);
			if (null != fos) {
				b.compress(Bitmap.CompressFormat.PNG, 90, fos);
				fos.flush();
				fos.close();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 
	 * 截屏并发送邮件
	 * 
	 * @author Johnson
	 * **/
	public static void takeScreenShotToEmail(Context context, Activity a) {

		if (getAvailableSDcard(context)) {
			savePic(takeScreenShot(a), filePath, fileName);

			// selectDialog(context);
			sendEmail(context, null, null, null, detailPath);
		}

	}

	/***
	 * Sd判断SD卡是否可用
	 * 
	 * @author Johnson minSizeSDcard>50kb
	 * */

	public static boolean getAvailableSDcard(Context context) {

		boolean sdCardExist = Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在

		System.out.println("+++" + sdCardExist);
		if (sdCardExist) {
			File path = Environment.getExternalStorageDirectory();
			StatFs stat = new StatFs(path.getPath());
			long blockSize = stat.getBlockSize();
			long availableBlocks = stat.getAvailableBlocks();
			long sdCardSize = (availableBlocks * blockSize) / 1024;// KB值

			if (sdCardSize > minSizeSDcard) {
				System.out.println("SDcardSize:::" + minSizeSDcard + "KB");
				return true;
			} else {
				Toast.makeText(context, "SD卡空间不足", Toast.LENGTH_SHORT).show();
			}

		} else {
			Toast.makeText(context, "请在使用转发功能之前插入SD卡", Toast.LENGTH_SHORT)
					.show();

		}
		return false;
	}

}



ScreenshotActivity:
package com.magus.screen;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ScreenshotActivity extends Activity {
    /** Called when the activity is first created. */
	
	Button bt;
	Context mContext;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        bt=(Button)findViewById(R.id.button1);
        mContext=this;
        bt.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				ScreenshotTools.takeScreenShotToEmail(mContext, ScreenshotActivity.this);
			}
		});
        
        
       
    }
}


本文转载自:http://johnson008.blog.51cto.com/4000361/743048 ,谢谢作者的指教.

你可能感兴趣的:(android)