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

如果做过移动办公软件,或者掌上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,  nullnullnull, 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 >
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值