Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打开透明活动并截图_Android_Android Intent_Android Activity_Android Bitmap - Fatal编程技术网

Android 打开透明活动并截图

Android 打开透明活动并截图,android,android-intent,android-activity,android-bitmap,Android,Android Intent,Android Activity,Android Bitmap,我想在没有根的情况下拍摄设备当前屏幕的截图。所以我打开一个透明的活动来截图,这样我就可以得到当前设备屏幕的截图。但我得到的错误如下所述 附言:如果我把takeScreen方法放在MainActivity类中,我就可以得到截图。但我不想那样 MainActivity.java 透明性.java 主平面布置图 您的方法不会截取透明活动后面的屏幕截图,因为此方法只保存特定视图或布局的内容,而不是您在屏幕上实际看到的内容 因此,请尝试使用媒体投影API——正如评论中所建议的那样 对于错误部分,请单击an

我想在没有根的情况下拍摄设备当前屏幕的截图。所以我打开一个透明的活动来截图,这样我就可以得到当前设备屏幕的截图。但我得到的错误如下所述

附言:如果我把takeScreen方法放在MainActivity类中,我就可以得到截图。但我不想那样

MainActivity.java

透明性.java

主平面布置图


您的方法不会截取透明活动后面的屏幕截图,因为此方法只保存特定视图或布局的内容,而不是您在屏幕上实际看到的内容

因此,请尝试使用媒体投影API——正如评论中所建议的那样


对于错误部分,请单击android studio中的错误消息-这会将光标移到错误发生的位置,希望您能快速得出结论。

您之所以会收到错误,是因为您试图在活动完成之前获取活动宽度和高度。您需要在活动完成后使用一个不可见的按钮或其他东西触发它


顺便说一句,你不能用生命周期来触发你的截图动作,因为我已经尝试过了,并且给出了和你一样的错误。请注意,即使它可以拍摄屏幕截图,结果也会是黑色的,我不知道为什么,但我的想法是,因为它本身就是透明的。我想拍摄设备当前屏幕的屏幕截图-在Android 5.0+上使用。因此,我正在打开一个透明活动以获取屏幕截图,这样我可以获得当前设备屏幕的屏幕截图-您的方法将不起作用。您的视图v1只是您的透明活动的视图。由于它是透明的,因此生成的“屏幕截图”也将是透明的。至于您的错误,这是一个非常不言自明的NullPointerException。你应该看看上面写的,你想这么做太早了。在onStart中,尚未设置视图层次结构。您应该将对takeScreen的调用封装在Runnable中,并在短延迟1秒后将其发送到Runnable。
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);
    }
}
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;
    }
}
<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>
<?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>
    <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" />
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