日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android實(shí)現(xiàn)截屏功能

瀏覽:48日期:2022-09-17 15:13:38
導(dǎo)言

目前截屏的方法很多,root不適用,要么其他方法就是有局限性,而其中官方給出的方案最好—MediaProjection

介紹

Android 5.0以后開(kāi)放的錄屏API,取視頻中的一幀數(shù)據(jù),這樣就可以實(shí)現(xiàn)截屏

步驟

在activity中授權(quán),在service中完成初始化并截圖,當(dāng)然可以后臺(tái)定時(shí)截圖,但是6.0系統(tǒng)會(huì)有內(nèi)存溢出的bug

1:build.gradle

compileSdkVersion 21 buildToolsVersion ’27.0.3’ defaultConfig {applicationId 'com.aile.screenshot'multiDexEnabled trueminSdkVersion 21targetSdkVersion 21versionCode 1versionName '1.0' }

2:在activity中授權(quán)

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() {@Overridepublic void run() { stopVirtual(); tearDownMediaProjection();} }, 0);} }public class SaveTask extends AsyncTask<Image, Void, Bitmap> {@Overrideprotected 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;}@Overrideprotected void onPostExecute(final Bitmap bitmap) { super.onPostExecute(bitmap); //處理bitmap的業(yè)務(wù)代碼 }

5:Bitmap轉(zhuǎn)IS流,指定區(qū)域截圖

// 將Bitmap轉(zhuǎn)換成InputStream ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); InputStream inputStream = new ByteArrayInputStream(bos.toByteArray());//指定區(qū)域截圖 Rect mRect = new Rect(51, 74, 58, 62); BitmapRegionDecoder bitmapRegionDecoder = BitmapRegionDecoder.newInstance(inputStream, true); Bitmap bm = bitmapRegionDecoder.decodeRegion(mRect, null);

6:定時(shí)任務(wù)的處理

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);} }

8:還有很多,只需按照需求走就OK,沒(méi)有難的東西,需要不停的學(xué)習(xí)和積累

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
樱桃视频成人在线观看| 激情六月综合| 免费日韩av片| 免费人成网站在线观看欧美高清| 亚洲尤物在线| 国产精品99久久久久久董美香| 天堂中文在线播放| 蜜臀久久久久久久| 里番精品3d一二三区| 久久精品一本| 精品三级国产| 中文日韩欧美| 久久亚洲精品中文字幕| 99精品美女| 国产日韩一区二区三区在线| 成人在线视频区| 精品久久久久久久| 国产欧美日韩精品一区二区免费 | 天堂va蜜桃一区二区三区| 老牛国内精品亚洲成av人片| 国产精品.xx视频.xxtv| 日韩精品导航| 久久国产欧美日韩精品| 午夜av一区| 欧美一级专区| 日韩三级一区| 国产精品www994| 日本一区二区免费高清| 亚洲深夜视频| 国产在线欧美| 丝袜诱惑制服诱惑色一区在线观看| 免费观看不卡av| 日本91福利区| 久久精品天堂| 91精品一区二区三区综合| 欧美a级一区| 国产精品多人| 欧美日韩视频网站| 日本欧洲一区二区| 91精品丝袜国产高跟在线| 欧美一区三区| 三上亚洲一区二区| 精品久久99| 亚洲精品人人| 久久蜜桃资源一区二区老牛| 欧美亚洲tv| 香蕉视频成人在线观看| 激情综合婷婷| 青青伊人久久| 久久国产高清| 欧美精选一区二区三区| 国产伦久视频在线观看| 你懂的亚洲视频| 国产精品一区二区av日韩在线| 国产亚洲一区二区手机在线观看 | 国产图片一区| 亚洲尤物av| 在线亚洲激情| 国产精品老牛| 在线亚洲精品| 在线一区欧美| 欧美1区2区3区| 日韩大片在线播放| 国模大尺度视频一区二区| 日韩综合小视频| 最新国产精品视频| 久久中文亚洲字幕| 日韩精品1区| 日产午夜精品一线二线三线| 国产在线不卡| 99精品综合| 国产精品国产三级国产在线观看| 久久99影视| 国产精品一区亚洲| 国产精品午夜av| 午夜亚洲福利| 99视频精品| 免费看精品久久片| 欧美精品自拍| 日韩精品一二三四| 午夜久久av | 男女精品网站| 丝袜国产日韩另类美女| 999在线观看精品免费不卡网站| 亚洲午夜在线| 成人午夜亚洲| 日韩中文在线电影| 国产精品密蕾丝视频下载| 欧美欧美黄在线二区| 一级欧美视频| 91精品99| 亚洲精品乱码久久久久久蜜桃麻豆 | 99国产成+人+综合+亚洲欧美| 91精品国产自产在线观看永久∴| 国产专区精品| 日韩午夜高潮| 日韩欧美2区| 国产麻豆精品久久| 欧美日韩亚洲一区二区三区在线| 午夜天堂精品久久久久| 国产欧美亚洲一区| 日韩精品1区| 欧美在线资源| 免费精品视频在线| 欧美aa在线视频| 亚洲1234区| 综合欧美精品| 国产成人精品三级高清久久91| 香蕉人人精品| 欧美亚洲tv| 亚洲专区在线| 国产成人精选| 免费美女久久99| 尤物精品在线| 亚洲人成网77777色在线播放| 亚洲视频二区| 五月天久久777| 国产精品久久久久久模特| 日韩av免费| 中文字幕成人| 香蕉精品久久| 国产欧美日韩精品一区二区免费| 国产精品午夜一区二区三区| 午夜精品婷婷| 免费久久99精品国产自在现线| 亚洲一本视频| 久久九九精品| 丝袜诱惑制服诱惑色一区在线观看| 国内精品美女在线观看| 国产精品一级在线观看| 精品亚洲a∨| 婷婷视频一区二区三区| 国产精品亲子伦av一区二区三区 | 国精品一区二区三区| 亚洲专区一区| 麻豆精品蜜桃视频网站| 日韩一区二区久久| 五月综合激情| 91成人在线网站| 国产三级一区| 福利一区和二区| 日本不良网站在线观看| 播放一区二区| 国产精品一区二区av交换| 亚洲伊人影院| 亚洲精品九九| 97成人超碰| 婷婷五月色综合香五月| 综合欧美精品| 鲁大师影院一区二区三区| 国模 一区 二区 三区| 欧美午夜不卡| 亚洲免费观看| 日本成人中文字幕在线视频| 热久久久久久久| 日韩中文字幕| 蜜桃视频第一区免费观看| 伊人久久大香线蕉av不卡| 私拍精品福利视频在线一区| 久久婷婷久久| 在线日韩成人| 国产精品调教视频| 极品av在线| 午夜av成人| 丝瓜av网站精品一区二区| 91免费精品国偷自产在线在线| 国产日韩欧美一区| 麻豆网站免费在线观看| 免费欧美一区| 一区二区三区午夜视频| 久久精品99国产国产精| 精品国产美女a久久9999| 97视频热人人精品免费| 亚洲少妇诱惑| 久久精品亚洲一区二区| 国精品一区二区三区| 日韩av电影一区| 日本精品在线中文字幕| 日本成人中文字幕| 亚洲女同av| 国产精品theporn| 欧美日韩免费观看一区=区三区| 日韩av一二三| 免费观看久久av| 国产亚洲一区二区三区啪| 久久免费国产| 国产一区二区三区四区二区| 亚洲成人二区| 国产精品大片| 亚洲欧美日韩国产一区| 精品日本视频| 日本午夜精品视频在线观看| 亚洲v在线看| 美女毛片一区二区三区四区最新中文字幕亚洲 | 日韩视频在线一区二区三区 | 你懂的国产精品永久在线| 五月天久久久| 亚洲黄色网址| 国产精品视频一区二区三区| 久久亚洲色图|