`
shoowc
  • 浏览: 5460 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

}

}
分享到:
评论

相关推荐

    bugshaker-android:摇一摇发送一个错误报告!

    当检测到晃动时,将捕获当前的屏幕状态,并提示用户通过电子邮件提交错误报告,并附带此屏幕截图。 该库类似于 ,但旨在更加轻松地集成到您的应用程序和工作流程中: 所有配置都在您的自定义子类中进行(无需更改...

    Parental-Controller-Android:家长可以使用Android应用程序来限制Android智能手机上的选定活动,并远程跟踪和监控孩子的行为

    发送带有时间段的电话位置转发图片发送手机中播放的视频的随机屏幕截图(仅通过电子邮件转发) 短信中带有关键字的远程启动/停止麦克风记录,并通过电子邮件转发音频文件访问子设备中的联系人列表在SMS中使用关键字...

    Android开发实验---通讯录.docx

    主要功能可包括: (1)可以添加、删减联系人 (2)联系人的信息包括:姓名、手机号码、工作单位、群组、电子邮件、手机铃声 (3)选择联系人后,可以快速进行操作,如:拨打电话发送短信、查看详细、移出群组、移动...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    android开发实例大全_王东华

    本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为...

    《Google Android SDK开发范例大全(第3版)》.pdf

    6.7 有来电,发送邮件通知 324 6.8 存储卡剩余多少容量 326 6.9 访问本机内存与存储卡 329 6.10 实现可定时响起的闹钟 335 6.11 黑名单来电自动静音 340 6.12 手机翻背面即静音振动 343 6.13 ...

    Google Android SDK开发范例大全(第3版) 1/5

    6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...

    Android开发应用实战详解源代码

    第1章 androi简介 1.1 初识android 1.1.1 历史背景 1.1.2 android特性 1.1.3 android组件结构 1.1.4 android应用程序框架 1.1.5 android的竞争优势 1.1.6 android模拟器 ...8.12 下载并观看视频 8.13 小结

    精通ANDROID 3(中文版)1/2

    18.1.4 发送电子邮件  18.2 使用电话管理器  18.3 SIP  18.4 参考资料  18.5 小结  第19章 媒体框架  19.1 使用媒体API  19.2 播放媒体  19.2.1 播放音频内容  19.2.2 播放视频内容  19.3 录制...

    Google Android SDK开发范例大全(第3版) 4/5

    6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...

    Google Android SDK开发范例大全(第3版) 3/5

    6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...

    BlitzMail:允许您一键通过电子邮件共享内容的Android应用程序!

    当您需要通过电子邮件发送很多东西时,这非常方便,因为您处在连接性较低的区域(例如地铁),并且想记住以后要看的东西。 离线时也可以使用。 然后,BlitzMail将您的电子邮件排队,并允许您稍后在再次连接时发送...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...

    PhoneRescue for Android v3.8.0.20210804 中文版 (安卓数据恢复软件).rar

    将丢失/删除的,联系人,通话记录,日历等邮件直接发送到您的Android设备,以便立即使用 涵盖所有Android OS 4.0及更高版本的手机/平板电脑,包括三星,华为,索尼,HTC,谷歌,LG,摩托罗拉,OnePlus等 扫描并识别...

    Google Android SDK开发范例大全的目录

    6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...

    android:IRCCloud Android应用程序

    您也可以通过给我们发送电子邮件,或者在Twitter 上找到我们。 Android IRCCloud在上可用。 屏幕截图 要求 Android Studio 4.1.x Gradle4.1.x Android 11.0 SDK 最新版本的AndroidX和Google Play服务 android-...

Global site tag (gtag.js) - Google Analytics