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);
}
}
分享到:
相关推荐
当检测到晃动时,将捕获当前的屏幕状态,并提示用户通过电子邮件提交错误报告,并附带此屏幕截图。 该库类似于 ,但旨在更加轻松地集成到您的应用程序和工作流程中: 所有配置都在您的自定义子类中进行(无需更改...
发送带有时间段的电话位置转发图片发送手机中播放的视频的随机屏幕截图(仅通过电子邮件转发) 短信中带有关键字的远程启动/停止麦克风记录,并通过电子邮件转发音频文件访问子设备中的联系人列表在SMS中使用关键字...
主要功能可包括: (1)可以添加、删减联系人 (2)联系人的信息包括:姓名、手机号码、工作单位、群组、电子邮件、手机铃声 (3)选择联系人后,可以快速进行操作,如:拨打电话发送短信、查看详细、移出群组、移动...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
本书以Android应用程序的开发为主题,并结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。本书的讲述由浅入深,实例全面并典型,几乎囊括了所有和Android应用相关的项目。全书分为...
6.7 有来电,发送邮件通知 324 6.8 存储卡剩余多少容量 326 6.9 访问本机内存与存储卡 329 6.10 实现可定时响起的闹钟 335 6.11 黑名单来电自动静音 340 6.12 手机翻背面即静音振动 343 6.13 ...
6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...
第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 小结
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 录制...
6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...
6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现可定时响起的闹钟 6.11 黑名单来电自动静音 6.12 手机翻背面即静音振动 6.13 指定时间置换桌面背景 6.14 判断发送短信后的状态...
6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...
6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...
当您需要通过电子邮件发送很多东西时,这非常方便,因为您处在连接性较低的区域(例如地铁),并且想记住以后要看的东西。 离线时也可以使用。 然后,BlitzMail将您的电子邮件排队,并允许您稍后在再次连接时发送...
6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...
将丢失/删除的,联系人,通话记录,日历等邮件直接发送到您的Android设备,以便立即使用 涵盖所有Android OS 4.0及更高版本的手机/平板电脑,包括三星,华为,索尼,HTC,谷歌,LG,摩托罗拉,OnePlus等 扫描并识别...
6.7 有来电,发送邮件通知——PhoneStateListener与ACTION_SEND 6.8 存储卡剩余多少容量——Environment加StatFs 6.9 访问本机内存与存储卡——File的创建与删除 6.10 实现可定时响起的闹钟——PendingIntent与...
您也可以通过给我们发送电子邮件,或者在Twitter 上找到我们。 Android IRCCloud在上可用。 屏幕截图 要求 Android Studio 4.1.x Gradle4.1.x Android 11.0 SDK 最新版本的AndroidX和Google Play服务 android-...