2013-12-10 113 views
0

我需要在我的项目,使当前活动的Android快照(整个主布局),我尝试很多方法,但我总是得到“)在cretenewFile(打开失败EACCES(拒绝)”错误,我这样的代码这样的:拍摄当前Android活动的快照?

public void TakeSnapshoot(){ 
     mainlayout.setDrawingCacheEnabled(true); 
     Bitmap b = mainlayout.getDrawingCache(); 

     String extr = Environment.getExternalStorageDirectory().toString() 
       + "/SaveCapture"; 
     File myPath = new File(extr); 

     if (!myPath.exists()) { 
      boolean result = myPath.mkdir(); 
      Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show(); 
     } 
     myPath = new File(extr, getString(R.string.app_name) + ".jpg"); 

     Toast.makeText(this, myPath.toString(), Toast.LENGTH_SHORT).show(); 
     FileOutputStream fos = null; 

     try { 
      fos = new FileOutputStream(myPath); 

      b.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
      fos.flush(); 
      fos.close(); 
      MediaStore.Images.Media.insertImage(getContentResolver(), b, 
        "Screen", "screen"); 


     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //Log.e("Error", e + ""); 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
      //Log.e("Error", e + ""); 
     } 

} 

的AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="SOA.com" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 
<!-- Network State Permissions --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

<!-- For android different screen sizes --> 
    <supports-screens 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="true" 
     android:resizeable="true" 
     android:anyDensity="true" 
    /> ... 

拍摄快照后话,我可以打印我想要的东西!?我认为这种方式是在Android中打印当前活动的最佳方式?! 请任何想法或帮助将不胜感激!

+0

您是否添加了写入权限? –

+0

是的,我这样做,但我仍然有同样的问题,我不知道为什么?! :( –

回答

1

这个函数会给你一个当前视图的位图。

Bitmap getBitmapFromView(View v) { 
    v.getRootView().measure(
      MeasureSpec.makeMeasureSpec(v.getLayoutParams().width, 
        MeasureSpec.EXACTLY), 
      MeasureSpec.makeMeasureSpec(v.getLayoutParams().height, 
        MeasureSpec.EXACTLY)); 
    // v.getp 
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 

    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), 
      Bitmap.Config.RGB_565); 
    Canvas c = new Canvas(b); 
    v.draw(c); 
    return b; 
} 
+0

但是请,我需要为ListView中的所有数据拍摄快照?通过使用你的功能?谢谢不管怎么说... –

+0

这个功能会给你一个全屏幕的截图,所以无论你在屏幕上会得到它的捕获 –

+0

我知道!但列表视图它包含滚动视图,所以有数据不会出现在屏幕截图!,,, –

1

清单档案中的添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

希望这会有所帮助。