我开发了应用程序,需要截图.
但它只是应用程序的快照.我想从应用程序中拍摄快照.
我已经研究了答案,但我还没有找到答案.
这是我的代码
但它只是应用程序的快照.我想从应用程序中拍摄快照.
我已经研究了答案,但我还没有找到答案.
这是我的代码
View view = getWindow().getDecorView().getRootView(); view.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); view.setDrawingCacheEnabled(false); saveImageToAppFolder(bitmap);
解决方法
要拍摄设备屏幕的屏幕截图,只有有root用户
调用screencap二进制如:
调用screencap二进制如:
Process sh = Runtime.getRuntime().exec("su",null,null); OutputStream os = sh.getOutputStream(); os.write(("/system/bin/screencap -p " + Environment.getExternalStorageDirectory()+ "/img.png").getBytes("ASCII")); os.flush(); os.close(); sh.waitFor()
并将该文件加载到位图中,使用
public static Bitmap decodeSampledBitmapFromFile(String path,int reqWidth,int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path,options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options,reqWidth,reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(path,options); } public static int calculateInSampleSize( BitmapFactory.Options options,int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2; final int halfWidth = width / 2; // Calculate the largest inSampleSize value that is a power of 2 and keeps both // height and width larger than the requested height and width. while ((halfHeight / inSampleSize) > reqHeight && (halfWidth / inSampleSize) > reqWidth) { inSampleSize *= 2; } } return inSampleSize; }