2017-01-30 3 views
0

のアンドロイドでスクリーンショットを取って、私は現在、このコードを持っている:はプログラムだから、別のウィンドウ

private void takeScreenshot() 
{ 

    Date now = new Date(); 
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); 
    try 
    { 
     String mPath = Environment.getExternalStorageDirectory().toString() + "/Screenshots/" + now + ".jpg"; 
     View v1 = getWindow().getDecorView().getRootView(); 
     v1.setDrawingCacheEnabled(true); 
     Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
     v1.setDrawingCacheEnabled(false); 
     File imageFile = new File(mPath); 
     FileOutputStream outputStream = new FileOutputStream(imageFile); 
     int quality = 100; 
     bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); 
     outputStream.flush(); 
     outputStream.close(); 
     Toast.makeText(getApplicationContext(), "Screenshot Saved", Toast.LENGTH_SHORT).show(); 


     MediaScannerConnection.scanFile(this, 
       new String[]{imageFile.toString()}, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
        } 
       }); 

     //openScreenshot(imageFile); 
    } catch (Throwable e) { 
     // Several error may come out with file handling or OOM 
     e.printStackTrace(); 
    } 
} 

このコードは、アプリ内の他の場所で生成された通知を押し、上と呼ばれています。コードはスクリーンショットを撮るだけで、実際に見ている場所に関係なくアプリケーションウィンドウをスクリーンショットしています。だから、私は別のウィンドウのスクリーンショットを取って、通知を通じてこの関数を呼び出したいと思っています。これは可能ですか?

P.S.私も、私はこのhttps://www.youtube.com/watch?v=_FLnTOqTorQ

+1

私はそれを試したことはありませんが、セキュリティ上の大きなリスクになるため、これが可能であることは間違いありません。アプリケーションがバックグラウンドサービスを介してスクリーンショットを作成し、ルートアクセスなしでサーバーに送信できる場合、スパイニージソフトウェアを作成するのは簡単です。 – Altoyyr

答えて

0

次のコードは、WebViewののscreenshootを取得するために動作するデモンストレーションYouTubeの動画へのリンクを追加しました:

アンドロイド5.0以上で
private void takeScreenshootOfWebview(){ 
     Bitmap mbitmap = getBitmapOFRootView(captureScreenShot); 
     createImage(mbitmap); 

} 


// First create bitmap of your view 
    public Bitmap getBitmapOFWebView(View v) { 
     View rootview = v.getRootView(); 
     rootview.setDrawingCacheEnabled(true); 
     Bitmap bitmap1 = rootview.getDrawingCache(); 
     return bitmap1; 
    } 

// Then save in file 
     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(); 
      } 
     } 
+0

プライベートvoid takeScreenshootOfWebview(){ ビットマップmbitmap = getBitmapOFRootView(captureScreenShot); createImage(mbitmap); } ここで、captureScreenshotを取得していますが、そのメソッド呼び出しに解析される理由は何ですか? –

0

、メディア投影APIを使用します(例: 、MediaProjectionManager)がスクリーンショットを取得する許可を要求し、実際にスクリーンショットを取得できるようになります。

+0

良いチュートリアルをお勧めしますか? APIの領域ではありません。 –

+0

@TVerran:私は最近チュートリアルはしていませんが、最近は探していません。 [サンプル・アプリケーション](https://commithware.com/commonsguy/cw-omnibus/tree/master/MediaProjection/andshooter)は、[a chapter]で扱っています(https://commonsware.com/Android/previews/ (https://commonsware.com/Android)のスクリーンショットとスクリーン録画) – CommonsWare

関連する問題