当前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问题:

Known Issue

+0

http://*.com/q/7762643/1318946 – 2014-12-05 06:37:02

+0

你有没有在AndroidManifest.xml中定义这个:?并检查:https://androidresearch.wordpress.com/2013/01/06/taking-a-screenshot-of-current-activity-in-android/ – 2014-12-05 06:37:47

+0

@HareshChhelana:用户权限是在AndroidManifest.xml中定义的 – 2014-12-05 15:13:28

该函数将返回当前活动的位图。所以你要保存,如果你想以后使用,或者如果你在同一个应用程序需要,那么你可以用位图对象使用

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