Android – не снимать скриншот текущего экрана

Код работает отлично для первого скриншота и сохраняет тот же скриншот, независимо от перехода на другой режим.

Как получить текущий скриншот?

public void saveBitmap(Bitmap bitmap) { File imagePath = new File(Environment.getExternalStorageDirectory() + "/" + new SimpleDateFormat("yyyyMMddhhmmss'.jpg'").format(new Date()) ); FileOutputStream fos =null; try { fos = new FileOutputStream(imagePath); bitmap.compress(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); } } 

Информация о клике:

 @Override public void onClick(View v) { switch (v.getId()) { case R.id.iSave: Bitmap bitmap = null; bitmap = takeScreenshot(); saveBitmap(bitmap); break; } } 

Вот:

 public Bitmap takeScreenshot() { View rootView = findViewById(android.R.id.content).getRootView(); rootView.setDrawingCacheEnabled(true); return rootView.getDrawingCache(); } 

Вызовите rootView.setDrawingCacheEnabled(false); После снятия экрана. Выключение и повторное включение принудительно обновляют его.

 public Bitmap takeScreenshot() { View rootView = findViewById(android.R.id.content).getRootView(); rootView.setDrawingCacheEnabled(true); Bitmap bitmap = rootView.getDrawingCache(); rootView.setDrawingCacheEnabled(false); return bitmap; } 

Я когда-либо пытался захватить текущую Activity а затем поделиться скриншотом. Вот как я это сделал, взгляните на них, если вы все еще заинтересованы, и я думаю, вы согласитесь.

Во-первых , получить корневой вид текущей Activity :

 View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 

или

 View rootView = findViewById(android.R.id.content); 

или

 View rootView = findViewById(android.R.id.content).getRootView(); 

Во-вторых , получите Bitmap из корневого представления:

 public static Bitmap getScreenShot(View view) { View screenView = view.getRootView(); screenView.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache()); screenView.setDrawingCacheEnabled(false); return bitmap; } 

В-третьих , сохраните Bitmap в SDCard :

 private final static String dir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Screenshots"; public static void store(Bitmap bm, String fileName){ File dir = new File(dir); if(!dir.exists()) dir.mkdirs(); File file = new File(dir, fileName); try { FileOutputStream fOut = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.PNG, 85, fOut); fOut.flush(); fOut.close(); } catch (Exception e) { e.printStackTrace(); } } 

At last , поделитесь файлом скриншота:

 private void shareImage(String file){ Uri uri = Uri.fromFile(file); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("image/*"); intent.putExtra(android.content.Intent.EXTRA_SUBJECT, ""); intent.putExtra(android.content.Intent.EXTRA_TEXT, ""); intent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(intent, "Share Screenshot")); }