android屏幕截图并通过邮件发送

if (path != null) {


File file = new File(path);
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri
.fromFile(file));
email.setType("image/png");
}else{

// email.setType("application/octet-stream");

}


/**
* 这段代码需要注意两点:
*
*
*一: 如果邮件附件path=/sdcard/chart.png 然后 Uri.parse(path),是取不到附件的
* 参见URI结构:scheme-specific-part
* 方法(1):加file://
* 方法(2):File file = new File(path); Uri.fromFile(file);
*
*
*二:用email.setType("image/png");或者email.setType("application/octet-stream"); 都不会影响邮件的发送
*为什么email.setType("image/png");而不用email.setType("application/octet-stream"); ?
*因为在开发中发现setType("image/png"),系统会同时给你调用彩信,邮件,等.....
*
*
*
* */

还有读写权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


package fjbi.ui;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
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 Tools {

/***
* @author wangchuang
*
* */

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";

// 获取指定Activity的截屏,保存到png文件
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;
}

/**
* 截图保存
*
*
* **/
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();
}
}

/**
*
* 截屏并发送邮件
*
* **/
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卡是否可用
*
* 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 ts = new Toast(context);
// ts.setText("SD卡空间不足");
// ts.show();

// Toast.makeText(context.getApplicationContext(), "SD卡空间不足",
// Toast.LENGTH_SHORT).show();

Toast.makeText(context, "SD卡空间不足", Toast.LENGTH_SHORT).show();

}

} else {
// Toast ts = new Toast(context);
// ts.setText("SD卡不存在");
// ts.show();

// Toast.makeText(context.getApplicationContext(), "SD卡不存在",
// Toast.LENGTH_SHORT).show();

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

}
return false;
}

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

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

// to = new String[] { "411148686@qq.com" };
// subject = "你有一条短信";
// body = "我要发送邮件啊";
// path=filePath+fileName;

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) {


File file = new File(path);
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri
.fromFile(file));
email.setType("image/png");
}else{

//email.setType("application/octet-stream");

}
context.startActivity(Intent.createChooser(email, "请选择发送软件"));

}

/**
*
* 意见反馈
*
* @author wangchuang
*
* */

public static void feedbackEmail(Context context) {

String str = context.getResources().getString(R.string.feedback_email);
String[] to = new String[] { str };

sendEmail(context, to, null, null, null);

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值