Android - снимок экрана - PullRequest
       13

Android - снимок экрана

1 голос
/ 15 июня 2011

Мне нужно сделать снимок экрана и сохранить снимок экрана.Мне нужно сделать это без использования какого-либо подключения к ПК или без рутирования телефона.Мне нужно делать это всякий раз, когда происходит событие.Например, когда реклама показывается в игре ... или когда игра заканчивается и показывает результаты в виде змеи и т. Д. Не могли бы вы сообщить мне, как я могу это сделать.Я видел некоторые учебники, и они дали код, но это не похоже на работу

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();
    }
}

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Вы должны сначала включить кэш , прежде чем вызывать getDrawingCache ().

1 голос
/ 06 ноября 2012
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 + "");
        }
0 голосов
/ 15 июня 2011

Можете ли вы дать больше информации о том, что не работает при запуске этого кода? Разве это не захватывает то, что вы хотите? Это сбой?

Убедитесь, что вы правильно изменили 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.layout на R.id.snake, из-за этой строки: android:id="@+id/snake".

Я не думаю, что есть простой способ найти / получить идентификатор «корневого» макета представления (если вы хотите сделать скриншот всего, что показывает телефон.

Я только что проверил модуль запуска и другое приложение, похоже, что большинство приложений помещаются в FrameLayout с идентификатором / контентом, поэтому вы можете попробовать использовать android.R.id.content, но нет никакой гарантии, что это будет работать каждый раз ...

...