您的位置:首页 > 移动开发 > Android开发

android开发实例03:屏幕截图并调用邮件发送

2012-09-16 10:46 429 查看
如果做过移动办公软件,或者掌上BI软件话,一般就会有一项功能,就是用户可以当前屏幕的显示的报表或者数据,截图并发送功能。

其中有一个开发时候的小技巧:

/*

* 用email.setType("image/png");或者email.setType(

* "application/octet-stream"); 都不会影响邮件的发送

* 为什么email.setType("image/png"

* );而不用email.setType("application/octet-stream"); ?

* 因为在开发中发现setType("image/png"),系统会同时给你调用彩信,邮件,等.....

*/

下面和大家分享下实现~~

package com.johnson.Screenshot;

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;

}

}

package com.johnson.Screenshot;

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

}

});

}

}

<?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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: