当前android的屏幕截图活动
问题描述:
我从互联网上获取此代码以捕获当前活动的屏幕。当前android的屏幕截图活动
View rootView = findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
Bitmap bitmap = rootView.getDrawingCache();
String str = new SimpleDateFormat("MM_dd_yyyy_HH_mm_ss").format(Calendar.getInstance().getTime()) + ".jpg";
File imagePath = new File(Environment.getExternalStorageDirectory() , str);
Log.i("catpure", "" + Environment.getExternalStorageDirectory() );
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
我也尝试了不同的代码。没有什么是为我工作的。 logcat中没有错误。该代码运行没有任何错误,但仍然没有保存图像。请让我知道我错了。提前致谢。
============================================= =================================
编辑
我检查我的代码和错误日志。它显示: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied).
但我有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在AndroidManifest.xml
。
什么是问题?请帮忙。
============================================= ============================
UPDATE 它的一款Android 5问题:
答
该函数将返回当前活动的位图。所以你要保存,如果你想以后使用,或者如果你在同一个应用程序需要,那么你可以用位图对象使用
public static Bitmap captureScreenshot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
@SuppressWarnings("deprecation")
int width = activity.getWindowManager().getDefaultDisplay().getWidth();
@SuppressWarnings("deprecation")
int height = activity.getWindowManager().getDefaultDisplay().getHeight();
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width, height - statusBarHeight);
view.destroyDrawingCache();
return bitmap2;
}
这里是保存位图功能:
private void saveImagetoSDCard(Bitmap bitmap)
{
Bitmap bit=takeScreenshot(DisplayImage.this);
try
{
String file_path = Environment.getExternalStorageDirectory().getAbsolutePath();
File storagePath = new File(Environment.getExternalStorageDirectory() + "/MyCameraApp/");
file = new File(storagePath, "Yudiz_krrish.png");
Log.d("TAG","File path after editing :"+file.getPath().toString());
FileOutputStream fOut = null;
fOut = new FileOutputStream(file);
bit.compress(Bitmap.CompressFormat.PNG, 85, fOut);
fOut.flush();
fOut.close();
btn_changeSettiong.setVisibility(View.VISIBLE);
btn_saveImage.setVisibility(View.VISIBLE);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
+0
:比你的帮助。我无法理解takeScreenshot并给我一个例外由于:java.lang.IllegalArgumentException:y +高度必须在位图 2014-12-06 07:15:38
http://*.com/q/7762643/1318946 – 2014-12-05 06:37:02
你有没有在AndroidManifest.xml中定义这个: ?并检查:https://androidresearch.wordpress.com/2013/01/06/taking-a-screenshot-of-current-activity-in-android/ –
2014-12-05 06:37:47
@HareshChhelana:用户权限是在AndroidManifest.xml中定义的 – 2014-12-05 15:13:28