Захват экрана в Android - PullRequest
       22

Захват экрана в Android

10 голосов
/ 17 сентября 2010

Я хочу разработать приложение, которое будет делать скриншот экрана Android. Кто-нибудь знает, как это сделать? что похоже на снимок экрана koushik duttas ... Но без использования root ... и есть ли у кого-нибудь приложение koushik dutta screenshot, которое работает ..? не работает для меня .. пожалуйста, дайте мне знать .. спасибо заранее.

Ответы [ 4 ]

19 голосов
/ 26 марта 2013

Допустим, вы нажали кнопку:

findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
       Bitmap bitmap = takeScreenshot();
       saveBitmap(bitmap);
   }
});

После этого вам понадобятся следующие два метода:

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

 public void saveBitmap(Bitmap bitmap) {
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png");
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        bitmap.compress(CompressFormat.PNG, 100, fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}
4 голосов
/ 24 мая 2011

Вы можете попробовать что-то вроде этого

private RelativeLayout view;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    view = (RelativeLayout)findViewById(R.id.relativeView);

    View v1 = view.getRootView();

    v1.setDrawingCacheEnabled(true);
    Bitmap bm = v1.getDrawingCache();
}
3 голосов
/ 10 ноября 2014

Метод view.getDrawingCache () сначала попытается получить ранее кэшированное изображение. Это может вызвать проблемы, если вы хотите гарантировать, что ваш скриншот обновлен. Например, если пользователь нажимает кнопку «Снимок экрана», затем изменяет пользовательский интерфейс, а затем нажимает ее еще раз, второй снимок экрана будет идентичен первому, если вы не очистите кэш. Я считаю следующий метод более удобным:

public Bitmap takeScreenshot() {
  View rootView = findViewById(android.R.id.content).getRootView();
  Bitmap bitmap = Bitmap.createBitmap(rootView.getWidth(), rootView.getHeight(), Bitmap.Config.ARGB_8888);
  Canvas canvas = new Canvas(bitmap);
  rootView.draw(canvas);
  return bitmap;
}
0 голосов
/ 17 сентября 2010

Я думаю, что это невозможно без рута или SDK, извините.

Я бы хотел оказаться ошибочным.

Не приложение, но если у вас есть USB-кабель, вы можетеустановите Android SDK на ПК и делайте скриншоты с ПК с помощью androidscreencast без необходимости рутировать ваш телефон.

...