android截屏功能实现
2014-01-06 23:37
465 查看
这篇文章实现了截取当前Activity页面,并把截屏图片储存在SD卡指定路径下功能(亲测可用)。
首先要确保manifest有操作SD卡权限
<!-- 允许应用内置sd卡 -->
下面方法是根据当前的activity截屏,生成bitmap对象
然后我们应该查看SD卡是不是够用
最后生成png图片保存到指定路径
可以这样调用
开始忘记加允许应用内置sd卡权限,系统报错:
然后忘记在fileName后面加“.png” 后果就是生成非图片文件。
提醒自己以后不要这么粗心了。
参考博客:http://blog.csdn.net/developer_jiangqq/article/details/12164239
首先要确保manifest有操作SD卡权限
<!-- 允许应用内置sd卡 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
下面方法是根据当前的activity截屏,生成bitmap对象
/** * 获取指定Activity的截屏,保存到png文件 * * @author Johnson * **/ private static Bitmap takeScreenShot(Activity activity) { // View是你需要截图的View View view = activity.getWindow().getDecorView(); // 设置是否可以进行绘图缓存 view.setDrawingCacheEnabled(true); // 如果绘图缓存无法,强制构建绘图缓存 view.buildDrawingCache(); // 返回这个缓存视图 Bitmap bitmap = view.getDrawingCache(); // 获取状态栏高度 Rect frame = new Rect(); // 测量屏幕宽和高 view.getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; Log.d("ViewDescActivity","状态栏的高度为: "+statusBarHeight); // 获取屏幕长和高 int width = activity.getWindowManager().getDefaultDisplay().getWidth(); int height = activity.getWindowManager().getDefaultDisplay().getHeight(); // 去掉标题栏 // Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455); bitmap = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height-statusBarHeight); //view.destroyDrawingCache(); return bitmap; }
然后我们应该查看SD卡是不是够用
/*** * Sd判断SD卡是否可用 * * @author Johnson minSizeSDcard>50kb * */ public static boolean getAvailableSDcard(Context context) { long minSizeSDcard = 50; 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) { return true; } else { Toast.makeText(context, "SD卡空间不足", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(context, "请插入SD卡", Toast.LENGTH_SHORT) .show(); } return false; }
最后生成png图片保存到指定路径
/** * 截图保存 * * @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(); } }
可以这样调用
Bitmap bitmap = takeScreenShot(ViewDescActivity.this); String fileName = String.valueOf(System.currentTimeMillis()); if(getAvailableSDcard(ViewDescActivity.this)){ savePic(bitmap,Constant.SD_DIR_SCREEN_SHOT,fileName+".png"); localUrl = Constant.SD_DIR_SCREEN_SHOT+ fileName+".PNG"; }
开始忘记加允许应用内置sd卡权限,系统报错:
01-06 23:32:40.203: ERROR/ActivityThread(1954): Failed to find provider info for com.qihoo360.daemon 01-06 23:32:43.148: ERROR/AudioTrack(1632): Audio track delete 01-06 23:32:43.148: ERROR/AudioTrack(1632): stop 0x528b88 01-06 23:32:43.148: ERROR/AudioTrack(1632): Stop complete 01-06 23:32:43.148: ERROR/AudioTrack(1632): Audio track exit start 01-06 23:32:43.148: ERROR/AudioTrack(1632): Audio track exit done 01-06 23:32:43.335: ERROR/AudioTrack(1632): stop 0x545d70 01-06 23:32:43.335: ERROR/AudioTrack(1632): Stop complete
然后忘记在fileName后面加“.png” 后果就是生成非图片文件。
提醒自己以后不要这么粗心了。
参考博客:http://blog.csdn.net/developer_jiangqq/article/details/12164239
相关文章推荐
- Android加载大图片,实现简单的截屏功能与保存截屏显示在图库
- Android实现截屏和截长图功能的几种方法
- android实现截屏功能代码
- vlc-android截屏以及录像功能的实现
- vlc-android截屏以及录像功能的实现
- Android实现截屏与截长图功能
- Android 视频播放器截屏功能实现讲解
- 【Android】实现截屏功能
- android代码实现截屏功能
- Android View 截屏功能的实现
- android截屏功能实现
- Android实现全屏截图或长截屏功能
- Android实现截屏并保存操作功能
- android截屏功能实现代码
- [置顶] Android 应用内禁止截屏功能的实现
- android截屏功能实现
- Android 实现截屏功能的实例
- android应用里面在某个界面禁止系统截屏功能的实现
- Android 实现截屏功能
- android实现截屏功能代码