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

您的位置:首頁技術文章
文章詳情頁

Android開發實現錄屏小功能

瀏覽:21日期:2022-09-23 09:16:12

最近開發中,要實現錄屏功能,查閱相關資料,發現調用 MediaProjectionManager的api 實現錄屏功能即可:

import android.Manifest;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.media.projection.MediaProjectionManager;import android.os.Build;import android.os.Bundle;import android.util.DisplayMetrics;import android.util.Log;public class RecordScreenActivity extends Activity { private boolean isRecord = false; private int mScreenWidth; private int mScreenHeight; private int mScreenDensity; private int REQUEST_CODE_PERMISSION_STORAGE = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestPermission(); getScreenBaseInfo(); startScreenRecord(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1000) { if (resultCode == RESULT_OK) {//獲得錄屏權限,啟動Service進行錄制Intent intent = new Intent(this, ScreenRecordService.class);intent.putExtra('resultCode', resultCode);intent.putExtra('resultData', data);intent.putExtra('mScreenWidth', mScreenWidth);intent.putExtra('mScreenHeight', mScreenHeight);intent.putExtra('mScreenDensity', mScreenDensity);startService(intent);finish(); } } } //start screen record private void startScreenRecord() { //Manages the retrieval of certain types of MediaProjection tokens. MediaProjectionManager mediaProjectionManager =(MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); //Returns an Intent that must passed to startActivityForResult() in order to start screen capture. Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent(); startActivityForResult(permissionIntent, 1000); } /** * 獲取屏幕基本信息 */ private void getScreenBaseInfo() { //A structure describing general information about a display, such as its size, density, and font scaling. DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); mScreenWidth = metrics.widthPixels; mScreenHeight = metrics.heightPixels; mScreenDensity = metrics.densityDpi; } @Override protected void onDestroy() { super.onDestroy(); } private void requestPermission() { if (Build.VERSION.SDK_INT >= 23) { String[] permissions = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA }; for (String str : permissions) {if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) { this.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE); return;} } } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode==REQUEST_CODE_PERMISSION_STORAGE){ startScreenRecord(); } }}

service 里面進行相關錄制工作

import android.app.Service;import android.content.Context;import android.content.Intent;import android.hardware.display.DisplayManager;import android.hardware.display.VirtualDisplay;import android.media.MediaRecorder;import android.media.projection.MediaProjection;import android.media.projection.MediaProjectionManager;import android.os.Environment;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;import java.text.SimpleDateFormat;import java.util.Date;/** * Created by dzjin on 2018/1/9. */ public class ScreenRecordService extends Service { private int resultCode; private Intent resultData=null; private MediaProjection mediaProjection=null; private MediaRecorder mediaRecorder=null; private VirtualDisplay virtualDisplay=null; private int mScreenWidth; private int mScreenHeight; private int mScreenDensity; private Context context=null; @Override public void onCreate() { super.onCreate(); } /** * Called by the system every time a client explicitly starts the service by calling startService(Intent), * providing the arguments it supplied and a unique integer token representing the start request. * Do not call this method directly. * @param intent * @param flags * @param startId * @return */ @Override public int onStartCommand(Intent intent, int flags, int startId) { try{ resultCode=intent.getIntExtra('resultCode',-1); resultData=intent.getParcelableExtra('resultData'); mScreenWidth=intent.getIntExtra('mScreenWidth',0); mScreenHeight=intent.getIntExtra('mScreenHeight',0); mScreenDensity=intent.getIntExtra('mScreenDensity',0); mediaProjection=createMediaProjection(); mediaRecorder=createMediaRecorder(); virtualDisplay=createVirtualDisplay(); mediaRecorder.start(); }catch (Exception e) { e.printStackTrace(); } /** * START_NOT_STICKY: * Constant to return from onStartCommand(Intent, int, int): if this service’s process is * killed while it is started (after returning from onStartCommand(Intent, int, int)), * and there are no new start intents to deliver to it, then take the service out of the * started state and don’t recreate until a future explicit call to Context.startService(Intent). * The service will not receive a onStartCommand(Intent, int, int) call with a null Intent * because it will not be re-started if there are no pending Intents to deliver. */ return Service.START_NOT_STICKY; } //createMediaProjection public MediaProjection createMediaProjection(){ /** * Use with getSystemService(Class) to retrieve a MediaProjectionManager instance for * managing media projection sessions. */ return ((MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_SERVICE)).getMediaProjection(resultCode,resultData); /** * Retrieve the MediaProjection obtained from a succesful screen capture request. * Will be null if the result from the startActivityForResult() is anything other than RESULT_OK. */ } private MediaRecorder createMediaRecorder(){ SimpleDateFormat simpleDateFormat=new SimpleDateFormat('yyyy-MM-dd-HH-mm-ss'); String filePathName= Environment.getExternalStorageDirectory()+'/'+simpleDateFormat.format(new Date())+'.mp4'; //Used to record audio and video. The recording control is based on a simple state machine. MediaRecorder mediaRecorder=new MediaRecorder(); //Set the video source to be used for recording. mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); //Set the format of the output produced during recording. //3GPP media file format mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //Sets the video encoding bit rate for recording. //param:the video encoding bit rate in bits per second. mediaRecorder.setVideoEncodingBitRate(5*mScreenWidth*mScreenHeight); //Sets the video encoder to be used for recording. mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //Sets the width and height of the video to be captured. mediaRecorder.setVideoSize(mScreenWidth,mScreenHeight); //Sets the frame rate of the video to be captured. mediaRecorder.setVideoFrameRate(60); try{ //Pass in the file object to be written. mediaRecorder.setOutputFile(filePathName); //Prepares the recorder to begin capturing and encoding data. mediaRecorder.prepare(); }catch (Exception e){ e.printStackTrace(); } return mediaRecorder; } private VirtualDisplay createVirtualDisplay(){ /** * name String: The name of the virtual display, must be non-empty.This value must never be null. width int: The width of the virtual display in pixels. Must be greater than 0. height int: The height of the virtual display in pixels. Must be greater than 0. dpi int: The density of the virtual display in dpi. Must be greater than 0. flags int: A combination of virtual display flags. See DisplayManager for the full list of flags. surface Surface: The surface to which the content of the virtual display should be rendered, or null if there is none initially. callback VirtualDisplay.Callback: Callback to call when the virtual display’s state changes, or null if none. handler Handler: The Handler on which the callback should be invoked, or null if the callback should be invoked on the calling thread’s main Looper. */ /** * DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR * Virtual display flag: Allows content to be mirrored on private displays when no content is being shown. */ return mediaProjection.createVirtualDisplay('mediaProjection',mScreenWidth,mScreenHeight,mScreenDensity,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,mediaRecorder.getSurface(),null,null); } @Override public void onDestroy() { super.onDestroy(); if(virtualDisplay!=null){ virtualDisplay.release(); virtualDisplay=null; } if(mediaRecorder!=null){ mediaRecorder.stop(); mediaRecorder=null; } if(mediaProjection!=null){ mediaProjection.stop(); mediaProjection=null; } } @Nullable @Override public IBinder onBind(Intent intent) { return null; }}

錄屏功能就這么實現了,有什么不妥之處,敬請留言討論。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本在线不卡视频| 日韩啪啪电影网| 日韩一区亚洲二区| 亚洲婷婷丁香| 韩国一区二区三区视频| 99视频精品全部免费在线视频| 久久国产88| 国产欧美日韩精品一区二区三区| 久久99蜜桃| 国产精品婷婷| 亚洲精品.com| 国产精品久久久久久模特| 午夜国产精品视频| 91欧美日韩| 国产乱论精品| 在线视频亚洲欧美中文| 在线亚洲人成| 六月丁香综合在线视频| 日韩一区二区三区精品 | 麻豆mv在线观看| 亚洲制服欧美另类| 日韩精品网站| 成人国产精品一区二区网站| 一区二区亚洲视频| 国产高清久久| 一区免费在线| 蜜桃久久av| 石原莉奈在线亚洲三区| 久久99伊人| 中文在线日韩| 日本成人在线不卡视频| 亚洲最新av| 91精品国产自产在线丝袜啪| 亚洲精品自拍| 亚洲深深色噜噜狠狠爱网站 | 国产视频网站一区二区三区| 99热精品在线| 红桃视频国产精品| 亚洲性视频在线| 亚洲字幕久久| 久久国产麻豆精品| 国内揄拍国内精品久久| 成人羞羞视频播放网站| 欧美在线资源| 日韩国产在线观看| 丰满少妇一区| 日韩午夜在线| 亚洲色诱最新| 国产日韩欧美中文在线| 久久亚洲精品中文字幕| 三级小说欧洲区亚洲区| 亚洲主播在线| 国产精品99精品一区二区三区∴| 精品国产欧美日韩| 亚洲一区成人| 精品伊人久久久| av成人国产| 国产一区二区三区四区| 在线精品小视频| 国产精品二区不卡| 亚洲精品影视| 欧美日韩在线网站| 日本va欧美va精品发布| 韩国精品主播一区二区在线观看 | 日韩精品水蜜桃| 婷婷视频一区二区三区| 国产高清不卡| 青青青国产精品| 国产偷自视频区视频一区二区| 国产精品xxx在线观看| 一区二区国产精品| 黄色免费成人| 久久精品国产大片免费观看| 亚洲区欧美区| 免费在线观看日韩欧美| 国产国产精品| 激情五月色综合国产精品| 久久电影tv| 精品日韩一区| 精品国产欧美日韩| 麻豆成人av在线| 久久av免费| 欧美91在线| 久久男人av| 成人黄色av| 中国字幕a在线看韩国电影| 欧美激情一区| 欧美国产小视频| 成人日韩av| 中文字幕在线免费观看视频| 久久亚洲人体| 欧美13videosex性极品| 久久久久国产| 丝袜亚洲另类欧美| 亚洲精品裸体| 国产精品国产三级在线观看| 欧美激情日韩| 美女毛片一区二区三区四区| 四虎影视精品| 综合亚洲自拍| 国产精品igao视频网网址不卡日韩 | 欧美一区网站| 久久永久免费| 天堂av在线一区| 国产日韩欧美一区二区三区在线观看 | 美女视频一区在线观看| 久久久一二三| 久久精品99国产精品日本| 国产调教精品| 亚洲人成网站在线在线观看| 开心激情综合| 亚洲精品高潮| 尤物tv在线精品| 日韩成人在线看| 伊人久久成人| 日本久久成人网| 国产精品久久久久77777丨| sm久久捆绑调教精品一区| 日本a级不卡| 中文字幕成人| 美女尤物久久精品| 在线日韩av| 日韩久久一区二区三区| 国产精品mv在线观看| 亚洲精品美女91| 国产一区日韩欧美| 激情黄产视频在线免费观看| 国产精品久久久久毛片大屁完整版| 国产亚洲精品v| 午夜国产一区二区| 欧美亚洲国产精品久久| 亚洲国产专区校园欧美| 午夜精品成人av| 亚洲人成在线网站| 久久青草久久| 国模 一区 二区 三区| 成人精品中文字幕| 欧美在线亚洲综合一区| 日韩一级精品| 日韩制服丝袜先锋影音| 激情欧美国产欧美| 黄色av一区| 亚欧洲精品视频在线观看| 婷婷综合一区| 国产视频一区二区在线播放| 国产亚洲高清一区| 国产成人免费视频网站视频社区| 久久精品亚洲| 久久精品国产www456c0m| 香蕉成人久久| 欧美日本三区| 97精品一区| 首页国产欧美久久| 国产精品一区二区精品视频观看 | 日本精品在线中文字幕| 国产一区二区三区免费在线| 欧美三区四区| 久久影院一区二区三区| 亚洲在线国产日韩欧美| 精品久久久网| 夜夜嗨一区二区三区| 久久中文字幕一区二区| 最新日韩av| 国产精品男女| 不卡在线一区二区| 国产精品久久久一区二区| 亚洲福利国产| 国产一区二区三区黄网站| 久久精品99国产精品日本| 免费人成在线不卡| 中文字幕一区久| 图片区亚洲欧美小说区| 美女精品久久| 国产免费av一区二区三区| 日本中文字幕一区二区视频| 成人羞羞在线观看网站| 欧美日韩 国产精品| 久久xxxx| 狠狠躁少妇一区二区三区| 91成人精品在线| 亚洲精品在线国产| 91精品丝袜国产高跟在线| 91综合久久爱com| 国产精品主播| 国产精区一区二区| 国产成人精品免费视| 亚洲www啪成人一区二区| 国产欧美啪啪| 亚洲成a人片| 精品九九在线| 国产精品igao视频网网址不卡日韩| 亚洲视频二区| 中文字幕日本一区| 欧美性感美女一区二区| 日本精品在线中文字幕| 日韩国产一区二区| 水蜜桃久久夜色精品一区| 国产精品一区二区av交换| 青青草伊人久久| 国产日韩欧美一区二区三区在线观看|