Öffnen Sie die transparente Tätigkeit und einen screenshot machen

Ich will einen screenshot von dem aktuellen Bildschirm des Gerätes (ohne verwurzelung). Also ich öffne eine transparente Aktivität nehmen Sie einen screenshot, so dass ich kann den screenshot von dem aktuellen Bildschirm des Geräts. Aber ich bin immer Fehler wie unten erwähnt.

P. S: ich bin in der Lage, um den screenshot Bild, wenn ich die takeScreen() Methode in der MainActivity-Klasse. Aber ich will nicht, dass.

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" />

Ich erhalte die folgende Fehlermeldung, wenn ich den code ausgeführt wird.

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 Antworten

  • m__
    25. November 2018

    Ihr Ansatz wird nicht nehmen screenshot des Bildschirms hinter Ihrem transparent-Aktivität, da diese Methode speichert nur den Inhalt der besonders anzeigen oder das layout nicht das, was Sie tatsächlich auf dem Bildschirm sehen.

    So versuchen Sie bitte, mithilfe der Media-Projektion APIs - https://developer.android.com/reference/android/media/projection/package-summary wie vorgeschlagen, in den Kommentaren.

    Für Fehler Teil, bitte klicken Sie auf die Fehlermeldung in android-studio - dadurch wird der cursor zu der Zeile wo der Fehler Auftritt, und ich hoffe, Sie können kommen, um Fazit schnell.

  • Kazuto Rito
    4. Mai 2019

    Sie werden immer Fehler, weil Sie versuchen, zu erhalten, Aktivität Breite und Höhe, bevor die Aktivität fertig stellen. Sie müssen, lösen Sie es nach der Aktivität durchgeführt wird, mit einem unsichtbaren button oder etwas anderes.

    Durch die Art und Weise, die Sie nicht verwenden können, life-cycle-zum auslösen der screenshot-Aktion, weil ich schon versuchen Sie es und geben Sie den gleichen Fehler wie du. Und als Hinweis: auch Sie können screenshot das Ergebnis wird schwarz und ich weiß nicht warum, aber mein Gedanke ist, weil die Tätigkeit, die er selbst auch sehen wir es als transparent.