展会信息港展会大全

Android开发实例:实现屏幕截图及邮件发送功能
来源:互联网   发布日期:2016-01-19 11:30:17   浏览:3155次  

导读:我们大家在用电脑的时候,都用过截屏的功能,有的时候截屏给我们带来了很多方便。那么我们怎么才能在Android上实现这个功能呢?下面我们就给大家提 供一些代码用以实现Android上的截屏功能。做掌上BT软件或者移 ...

我们大家在用电脑的时候,都用过截屏的功能,有的时候截屏给我们带来了很多方便。那么我们怎么才能在Android上实现这个功能呢?下面我们就给大家提 供一些代码用以实现Android上的截屏功能。

做掌上BT软件或者移动办公软件 ,一般都会有这样一个功能,用户可以对屏幕当前显示的数据或报表进行截图,并通过邮件发送。本文的开发实例就是要 实现此功能。

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

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

下面k将实现方法跟大家分享一下:

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/HTML代码如下:

<?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>

赞助本站

人工智能实验室

相关热词: 屏幕截图 邮件发送

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港