如何在Android 5.0或sdk> 21中拍摄屏幕截图

时间:2016-04-13 08:33:52

标签: android

如您所知,如果设备已植根,您可以使用代码

进行截屏
Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream  os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();

但是使用SDK> 21(5.0或更高版本)它不支持此功能。 所以,我想知道如何使用Android 5.0或更高版本进行屏幕截图 来自服务(另一个应用程序)。

我看过MediaProjectionManager,但它需要运行onActivityResult来获取结果,但是在服务中,它不能激活。

3 个答案:

答案 0 :(得分:0)

这个适合你: 在您的类文件中全局声明 -

private File imageFile; private void takeScreenshot(){

    try {
        String mPath = Environment.getExternalStorageDirectory().toString() +"\\/pic";            View v1 = FirstScreenActivity.mActivity.getWindow().getDecorView().getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        imageFile = new File(mPath);

        FileOutputStream outputStream = new FileOutputStream(imageFile);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        outputStream.flush();
        outputStream.close();
    } catch (Throwable e) {
        e.printStackTrace();
    }

答案 1 :(得分:0)

首先在Activity类中添加一个活动对象,如下所示 -

public class FirstScreenActivity extends AppCompatActivity {

public static Activity mActivity;
private File imageFile;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mActivity=this;
}

@Override
protected void onResume() {
    super.onResume();}

然后在非活动类文件中使用静态mActivity,使用上面代码中的代码:

View v1 = FirstScreenActivity.mActivity.getWindow().getDecorView().getRootView();

答案 2 :(得分:0)

这是在清单文件中指定的接收器 -

(fn? x)

(ifn? x)

就像这些动作一样,您也可以选择其他动作。 注意:请勿忘记为您在接收器中使用的操作添加权限。 这是接收器类,您将编写代码(在本例中为截屏) -

<receiver android:name=".reciever.EventReceiver">
        <intent-filter >
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            <action android:name="android.intent.action.USER_PRESENT"/>
        </intent-filter>
    </receiver>

}

使用此选项,接收器类的onReceive()将在您在清单中指定的特定事件操作上执行。