iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android中怎么实现一个截屏功能
  • 798
分享到

Android中怎么实现一个截屏功能

2023-06-20 15:06:27 798人浏览 泡泡鱼
摘要

这篇文章给大家介绍Android中怎么实现一个截屏功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:build.gradlecompileSdkVersion 21   &n

这篇文章给大家介绍Android中怎么实现一个截屏功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1:build.gradle

compileSdkVersion 21    buildToolsVersion '27.0.3'    defaultConfig {        applicationId "com.aile.screenshot"        multiDexEnabled true        minSdkVersion 21        targetSdkVersion 21        versionCode 1        versionName "1.0"    }

2:在activity中授权

public void requestCapturePermission() {        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {            return;        }        MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);        startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION);    }    @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) {                    Service.setResultData(data);                    startService(new Intent(this, Service.class));                    finish();                }                break;        }    }

3:在service中初始化ImageReader,MediaProjection

private void createImageReader() {        mImageReader = ImageReader.newInstance(mScreenWidth, mScreenHeight, PixelFORMat.RGBA_8888, 1);    } public void setUpMediaProjection() {        mMediaProjection = getMediaProjectionManager().getMediaProjection(Activity.RESULT_OK, mResultData);        }    }

4:在service中完成截图重要步骤:

private void startScreenShot() {        Handler handler = new Handler();        handler.postDelayed(new Runnable() {            @Override            public void run() {                startVirtual();            }        }, 0);        handler.postDelayed(new Runnable() {            @Override            public void run() {                startCapture();            }        }, 50);    } public void startVirtual() {        if (mMediaProjection != null) {            virtualDisplay();        } else {            setUpMediaProjection();            virtualDisplay();        }    } private void virtualDisplay() {        mVirtualDisplay = mMediaProjection.createVirtualDisplay("screen-mirror",                mScreenWidth, mScreenHeight, mScreenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,                mImageReader.getSurface(), null, null);    }//异常处理的核心private void startCapture() {        Image image = null;        try {            image = mImageReader.acquireLatestImage();        } catch (IllegalStateException e) {            if (null != image) {                image.close();                image = null;                image = mImageReader.acquireLatestImage();            }        }        if (image == null) {            startScreenShot();        } else {            SaveTask mSaveTask = new SaveTask();            AsyncTaskCompat.executeParallel(mSaveTask, image);            new Handler().postDelayed(new Runnable() {                @Override                public void run() {                    stopVirtual();                    tearDownMediaProjection();                }            }, 0);        }    }public class SaveTask extends AsyncTask<Image, Void, Bitmap> {        @Override        protected Bitmap doInBackground(Image... params) {            if (params == null || params.length < 1 || params[0] == null) {                return null;            }            Image image = params[0];            int width = image.getWidth();            int height = image.getHeight();            final Image.Plane[] planes = image.getPlanes();            final ByteBuffer buffer = planes[0].getBuffer();            int pixelStride = planes[0].getPixelStride();            int rowStride = planes[0].getRowStride();            int rowPadding = rowStride - pixelStride * width;            Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);            bitmap.copyPixelsFromBuffer(buffer);            //这就是初始截图            bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);            image.close();            return bitmap;        }        @Override        protected void onPostExecute(final Bitmap bitmap) {            super.onPostExecute(bitmap);            //处理bitmap的业务代码    }

5:Bitmap转IS流,指定区域截图

// 将Bitmap转换成InputStream   ByteArrayOutputStream bos = new ByteArrayOutputStream();   bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);   InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());//指定区域截图   Rect mRect = new Rect(51, 74, 58, 62);   BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, true);   Bitmap bm = bitmapRegionDecoder.decodeRegion(mRect, null);

6:定时任务的处理

private Timer timer = new Timer(); public void shootByTime() {        final Handler handler = new Handler() {            @Override            public void handleMessage(Message msg) {                startScreenShot();                super.handleMessage(msg);            }        };        timer.schedule(new TimerTask() {            @Override            public void run() {                Message message = new Message();                message.what = 1;                handler.sendMessage(message);            }        }, 0, 100);    }

7:横竖屏的处理

@Override    public void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        if (newConfig.orientation == this.getResources().getConfiguration().ORIENTATION_PORTRAIT) {            mRect = new Rect(51, 775, 745, 47);        } else if (newConfig.orientation == this.getResources().getConfiguration().ORIENTATION_LANDSCAPE) {            mRect = new Rect(54, 24, 545, 45);        }    }

关于Android中怎么实现一个截屏功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Android中怎么实现一个截屏功能

本文链接: https://www.lsjlt.com/news/297788.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中怎么实现一个截屏功能
    这篇文章给大家介绍Android中怎么实现一个截屏功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1:build.gradlecompileSdkVersion 21   &n...
    99+
    2023-06-20
  • 怎么在Android应用中实现一个截图与录屏功能
    这篇文章给大家介绍怎么在Android应用中实现一个截图与录屏功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。截屏:步骤如下:获取MediaProjectionManager通过MediaProjectionMana...
    99+
    2023-05-31
    android roi
  • Android实现截屏功能
    导言 目前截屏的方法很多,root不适用,要么其他方法就是有局限性,而其中官方给出的方案最好—MediaProjection 介绍 Android 5.0以后开放的录屏API,取视频...
    99+
    2022-11-12
  • 使用Java怎么实现一个网页截屏功能
    使用Java怎么实现一个网页截屏功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:package awtDemo;import j...
    99+
    2023-05-30
    java
  • android截屏功能实现代码
    android开发中通过View的getDrawingCache方法可以达到截屏的目的,只是缺少状态栏! 原始界面 截屏得到的图片 代码实现 1. 添加权限(Android...
    99+
    2022-06-06
    Android
  • Android 实现截屏功能的实例
    Android 实现截屏功能的实例实现代码:public class ScreenShot { // 获取指定Activity的截屏,保存到png文件 private static Bitmap takeScreenShot(Activ...
    99+
    2023-05-30
    android 截屏 roi
  • 怎么在Android 应用中实现一个全屏与非全屏功能
    怎么在Android 应用中实现一个全屏与非全屏功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 应用的全屏和非全屏实现代码 全屏显示操作: p...
    99+
    2023-05-31
    android roi
  • Android中怎么实现截图功能
    Android中怎么实现截图功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 截图功能源码的分析一般没有修改rom的android原生系统截图功能的组合键是音量...
    99+
    2023-05-30
    android
  • 怎么用JavaScript实现截屏功能
    这篇文章主要讲解了“怎么用JavaScript实现截屏功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用JavaScript实现截屏功能”吧!1.Blob的媒体类型必须是"i...
    99+
    2023-06-17
  • android截屏功能实现方式汇总【包括后台截屏】
    前言 对于android实现截屏功能,简单讲述一下可行的方法和之间的利弊 使用canvas View v = getWindow().getDecorView();Bitmap bitmap = Bitmap.createBitmap(...
    99+
    2023-08-16
    android android studio ide
  • Android 中如何实现一个全屏图片功能
    这篇文章将为大家详细讲解有关Android 中如何实现一个全屏图片功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、在Activity的onCreate方法中实现: @Override ...
    99+
    2023-05-31
    android roi 如何实现
  • Android实现截屏并保存操作功能
    该篇文章是说明在Android手机或平板电脑中如何实现截取当前屏幕的功能,并把截取的屏幕保存到SDCard中的某个目录文件夹下面。 实现的代码如下: private v...
    99+
    2022-06-06
    Android
  • 怎么在Android应用中实现一个强制横屏或强制竖屏功能
    这期内容当中小编将会给大家带来有关怎么在Android应用中实现一个强制横屏或强制竖屏功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。强制竖屏设置代码在Activity的onResume方法中添加如下代...
    99+
    2023-05-31
    android roi
  • 怎么在Android中实现一个摇一摇功能
    本篇文章给大家分享的是有关怎么在Android中实现一个摇一摇功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤1:声明一个SensorManager对象步骤2:重写Act...
    99+
    2023-06-14
  • Android实现一键锁屏功能
    android实现一键锁屏 创建AdminReceiver import android.app.admin.DeviceAdminReceiver; public class Ad...
    99+
    2022-11-13
    android一键锁屏 android锁屏
  • android自动截图功能怎么实现
    要在Android中实现自动截图功能,可以使用以下步骤:1. 在AndroidManifest.xml文件中添加权限声明,以允许访问...
    99+
    2023-08-24
    android
  • 实现一个Android锁屏App功能的难点总结
    自定义一个漂亮实用的锁屏app,如果能赢得用户的认可,替换系统自带的锁屏,绝对是一个不小的日活入口。这段时间正好总结一下最近调研的Android平台的锁屏app开发中的难点。 ...
    99+
    2022-06-06
    app Android
  • Android开发中怎么实现一个分享功能
    Android开发中怎么实现一个分享功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。实现代码如下所示;Intent email = new Intent(android....
    99+
    2023-05-31
    android roi
  • 怎么在Android中实现一个倒计时功能
    本篇文章给大家分享的是有关怎么在Android中实现一个倒计时功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。以30分钟为例写的一个倒计时:public class Main...
    99+
    2023-05-31
    android roi %d
  • 怎么在Android中实现一个计步器功能
    本篇文章给大家分享的是有关怎么在Android中实现一个计步器功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。activity_main.xml<xml ve...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作