Abierto, transparente de la actividad y tomar una captura de pantalla

Quiero tomar una captura de pantalla de la pantalla actual del dispositivo (sin enraizamiento). Así que estoy abriendo un transparente la actividad de tomar una captura de pantalla para que yo pueda obtener la captura de pantalla de la actual pantalla del dispositivo. Pero estoy recibiendo de error que se mencionan a continuación.

P. S: soy capaz de conseguir la captura de pantalla de la imagen si pongo el takeScreen() método dentro de la clase MainActivity. Pero yo no quiero eso.

MainActivity.java

public class MainActivity extends Activity {
    Bitmap bitmap;

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

    public void btn_1(View view) {
        Intent mainIntent = new Intent(this, transparentActivity.class);
        startActivity(mainIntent);
    }
}

transparentActivity.java

public class transparentActivity extends Activity {

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

    @Override
    protected void onStart() {
        super.onStart();
        Bitmap image = takeScreen();
    }

    public Bitmap takeScreen() {
        View v1 = getWindow().getDecorView().getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);
        return bitmap;
    }
}

main_layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <Button xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/button1"
        style="?android:attr/buttonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:layout_gravity="center_horizontal|center"
        android:layout_marginStart="235dp"
        android:layout_marginBottom="99dp"
        android:onClick="btn_1"
        android:text="Button 1" />
</RelativeLayout>

transparent_layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

</android.support.constraint.ConstraintLayout>

AndroidManifest.xml

    <activity
        android:name=".MainActivity"
        android:exported="true"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

<activity
    android:name=".transparentActivity"
    android:exported="true"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

Estoy recibiendo el siguiente mensaje de error cuando estoy ejecutando el código.

java.lang.RuntimeException: Unable to start activity ComponentInfo{transparentActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference

2 Respuestas

  • m__
    25 de noviembre de 2018

    Su enfoque no tomar la captura de pantalla de la pantalla de detrás de su transparente de la actividad ya que este método sólo se guarda el contenido de la particular visión de la presentación o no de lo que realmente ve en la pantalla.

    Así que por favor trate de usar los Medios de comunicación de Proyección Api - https://developer.android.com/reference/android/media/projection/package-summary como se sugiere en los comentarios.

    Por error de parte, por favor haga clic en el mensaje de error en el android studio - esto llevará cursor a la línea donde el error está ocurriendo y que con suerte se puede llegar a una conclusión rápida.

  • Kazuto Rito
    4 de mayo de 2019

    Usted está consiguiendo que el error porque usted está tratando de obtener de la actividad de la anchura y la altura antes de finalizar la actividad. Debe iniciar después de la actividad se realiza con un botón invisible o algo más.

    Por cierto, no se puede utilizar el ciclo de vida de activar la captura de pantalla de la acción, porque yo ya lo intente y dar el mismo error como usted. Y como nota incluso se puede tomar la captura de pantalla el resultado será de color negro y no sé por qué, pero mi pensamiento es debido a que la actividad en sí, incluso podemos ver como transparente.