android 5.0 截屏权限,Android 5.0 无Root权限实现截屏

本文介绍了Android 5.0之后提供的官方截屏API,通过MediaProjectionManager实现无Root权限的截屏。包括获取屏幕实时信息、创建虚拟屏幕、获取虚拟屏幕内容并转换为Bitmap。详细讲解了实现过程,并提供了ScreenShotHelper类的封装示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android在5.0之后提供了官方的截屏API,再也不需要root再调用adb指令,或者使用辅助服务模拟截屏按键实现截屏了。本文将介绍实现过程,并在最后提供Demo以供下载参考。

1. 实现流程

1.1 获取屏幕的实时信息

先请求截屏的服务,需要等用户同意后,才能获取屏幕实时信息。通过调用getSystemService()方法,得到MediaProjectionManager对象。该对象我们需要关注两个东西,一个是通过createScreenCaptureIntent()方法得到的Intent对象(这里会用到),一个是通过getMediaProjection()得到的MediaProjection对象(下节会用到)。

在这里,我们通过MediaProjectionManager的createScreenCaptureIntent方法得到一个Intent请求,将其作为startActivityForResult的参数启动一个截屏请求。此时,系统会向用户申请截屏权限,告知用户接下来会有截屏操作,同时也开始截屏的准备工作。代码实现如下:private void try2StartScreenShot() {

MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);

startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);

}

在onActivityResult方法里面可以拿到返回的Intent数据,该Intent只是一个引用,里面的东西是实时在改变的(因为里面记录的是屏幕信息),信息存储在intent里面的bundle,bundle里面记录的是一个用Android专用序列化方式Parcelable序列化过的一个对象。代码如下:@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);    switch (requestCode)  {        case REQUEST_MEDIA_PROJECTION:{

if (resultCode == RESULT_OK && data != null)  {                this.data = data;

}            break;

}

}

}

1.2 创建虚拟屏幕

在这节中,我们需要再次借助MediaProjectionManager类,调用getMediaProjection()方法得到mMediaProject

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值