2017-01-26 4 views
-2

안녕하세요 거기에 오버레이 된 단추가있는 안드로이드의 응용 프로그램을 만들고 전화 (모든 FLAG_SECURE 제외)의 모든 응용 프로그램의 스크린 샷 (오버레이 단추를 클릭하면)을 가져 가고 싶습니다. 이 앱이 실제로 이렇게하기 때문에 가능하다는 것을 알고 있습니다. https://play.google.com/store/apps/details?id=com.tools.screenshot모든 애플리케이션의 스크린 샷을 가져 오는 방법은 무엇입니까?

아무도이 스크린 샷을 수행 할 수있는 코드 예제를 아십니까? 이미 오버레이 버튼이 있으므로 스크린 샷 코드 만 필요합니다. 감사합니다

너무 답변으로 폭 넓은 있지만, 옛 블로그에서이 있었다
+0

는 미디어 프로젝션 API를 사용합니다. – CommonsWare

+2

책, 도구, 소프트웨어 라이브러리, 자습서 또는 기타 오프 사이트 리소스를 추천하거나 찾도록 요청하는 질문은 독단적 인 답변 및 스팸을 유치하는 경향이 있으므로 스택 오버플로에 대해 주제를 벗어났습니다. 대신 문제를 설명하고 지금까지 해결 된 문제를 설명하십시오. –

+0

@CommonsWare에서 참조 또는 샘플 코드를 알고 있습니까? 샘플 코드를 찾았지만 실제로 코드 나 서비스에 구현할 수 없습니다. ( – Luca486

답변

0

:

import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.os.Environment; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 

public class TakingScreenShotAndroid extends AppCompatActivity { 

TextView textView; 
ImageView imageView; 
Bitmap mbitmap; 
Button captureScreenShot; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.taking_screenshot_in_android); 


    textView = (TextView) findViewById(R.id.textView); 
    textView.setText("Your ScreenShot Image:"); 

    captureScreenShot = (Button) findViewById(R.id.capture_screen_shot); 
    imageView = (ImageView) findViewById(R.id.imageView); 

} 

public void screenShot(View view) { 
    mbitmap = getBitmapOFRootView(captureScreenShot); 
    imageView.setImageBitmap(mbitmap); 
    createImage(mbitmap); 
} 

public Bitmap getBitmapOFRootView(View v) { 
    View rootview = v.getRootView(); 
    rootview.setDrawingCacheEnabled(true); 
    Bitmap bitmap1 = rootview.getDrawingCache(); 
    return bitmap1; 
} 

public void createImage(Bitmap bmp) { 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 
    File file = new File(Environment.getExternalStorageDirectory() + 
      "/capturedscreenandroid.jpg"); 
    try { 
     file.createNewFile(); 
     FileOutputStream outputStream = new FileOutputStream(file); 
     outputStream.write(bytes.toByteArray()); 
     outputStream.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

} 

strings.xml의

<string name="app_name">Taking Screenshot in Android Programmatically</string> 
TakingScreenShotAndroid.java

taking_screenshot_in_android.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/layout" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_margin="16dp" 
android:gravity="center" 
android:orientation="vertical"> 


<Button 
    android:id="@+id/capture_screen_shot" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="screenShot" 
    android:text="Take ScreenShot" /> 

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    android:text="" /> 

<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="200dp" 
    android:layout_height="250dp" 
    android:background="#ccc" 
    android:padding="5dp" /> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:autoLink="web" 
    android:gravity="center|bottom" 
    android:text="ViralAndroid.com" 
    android:textSize="26sp" 
    android:textStyle="bold" /> 
</LinearLayout> 

출력 :

안드로이드 5.0에

enter image description here

+0

이 코드는 내 자신의 응용 프로그램 권한 만 캡쳐 할 수 있습니까? – Luca486

+0

@ Luca486 예, 동일합니다. 그러나 원하는 경우이 코드를 위젯에 넣거나 조작 할 수 있습니다. 일반적인 스크린 샷 코드입니다. – W4R10CK