2011-06-15 10 views
1

스크린 샷을 저장하고 스크린 샷을 저장해야합니다. PC에 연결하거나 전화를 끊지 않고이 작업을 수행해야합니다. 이벤트가 발생할 때마다이 작업을 수행해야합니다. 예를 들어 광고가 게임에 표시 될 때 ... 또는 게임이 끝나고 뱀 등의 점수가 표시 될 때 예를 들어 알려주세요. 어떻게 할 수 있습니까? 좀 tutorilas를보고 그들은 코드를 준하지만 나던Android - 스크린 샷 찍기

private void getScreen() 
    { 
    View content = findViewById(R.id.layoutRoot); 
    Bitmap bitmap = content.getDrawingCache(); 
    File file = new File("/sdcard/test.png"); 
    try 
    { 
     file.createNewFile(); 
     FileOutputStream ostream = new FileOutputStream(file); 
     bitmap.compress(CompressFormat.PNG, 100, ostream); 
     ostream.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

po ssible duplicate http://stackoverflow.com/questions/5929403/take-screenshot-of-android-screen-and-save-to-sd-card 및 http://stackoverflow.com/questions/5939987/android-take- screenshot-via-code – DynamicMind

답변

0

당신이 그 코드를 실행하면 작동하지 않습니다 무엇인지에 더 많은 정보를 제공 할 수 제대로 작동? 당신이 원하는 것을 포착하지 않습니까? 그것은 추락합니까?

당신이 그것을 작동하는 것처럼 보인다 옆에 있음 ... 루트 레이아웃을 올바르게 R.id.layoutroot을 변경해야합니다 ...

<com.example.android.snake.SnakeView 
android:id="@+id/snake" 
    android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tileSize="24" 
      /> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
    android:id="@+id/text" 
     android:text="@string/snake_layout_text_text" 
     android:visibility="visible" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:gravity="center_horizontal" 
     android:textColor="#ff8888ff" 
     android:textSize="24sp"/> 
</RelativeLayout> 

수정 ...

예를 들어 방금 배치 한 레이아웃을 사용하는 경우 R.id.layoutR.id.snake으로 변경해야합니다. 그 이유는이 라인이 android:id="@+id/snake"이기 때문입니다.

난 당신이 전화가 표시되고 아무것도의 화면을 캡처하기를 원한다면 (뷰의 "루트"레이아웃의 ID를 얻을 수/쉽게 찾을 방법이라고 생각하지 않습니다

.

난 그냥 확인 실행기 및 다른 응용 프로그램은 대부분의 응용 프로그램이 ID/콘텐츠가 포함 된 FrameLayout에 배치되어 있기 때문에 android.R.id.content을 사용하려고 시도 할 수는 있지만 보장이 없습니다 ...

+0

R.id.layoutroot를 해결할 수 없다는 메시지가 표시됩니다. 올바른 레이아웃 루트에 어떻게 매핑 할 수 있는지 알려주십시오. – Vaali

+0

스크린 샷을 찍으려는보기에 사용하고있는 main.xml 또는 레이아웃 파일을 게시 할 수 있습니까? 그들 중 적어도 하나는 ... – Matthieu

+0

나는 이것에 대해 많이 안다. ... 나는 snakelayout.xml을 붙여 넣었다. 이 파일이 현재 말하는 파일입니까 아니면 다른 파일입니까? – Vaali

1

먼저 enable the cache을 사용해야합니다. , getDrawingCache()를 호출하기 전에.

+0

감사합니다. 그것은 내 질문의 일부를 해결했다. – Vaali

1
View ve = findViewById(R.id.loyout); 
     ve.setDrawingCacheEnabled(true); 
     Bitmap b = ve.getDrawingCache(); 

     String extr = Environment.getExternalStorageDirectory().toString() 
       + "/SaveCapture"; 
     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) { 

      Log.e("Error", e + ""); 
     } 

     catch (Exception e) { 

      Log.e("Error", e + ""); 
     } 
관련 문제