版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxingchong/article/details/86605037
看到几个网友留言需要源码参考,需要的可以拿走:
这里先提供几个工具类:
1.录屏工具类ScreenUtil.java
package com.android.systemui.util;
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.widget.Toast;
import com.android.systemui.ScreenRecordService;
import com.android.systemui.R;
import android.app.Application;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
public class ScreenUtil {
private final static String TAG = "ScreenUtil";
private static ScreenRecordService mScreenRecordService;
private static List<RecordListener> mRecordListener = new ArrayList<>();
private static List<OnPageRecordListener> mPageRecordListener = new ArrayList<>();
public static boolean mIsRecordingTipShowing = false;
/**
* Only after the 5 version of the screen can be used
* @return
*/
public static boolean isScreenRecordEnable(){
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ;
}
public static void setScreenService(ScreenRecordService screenService){
mScreenRecordService = screenService;
}
public static void clear(){
if ( isScreenRecordEnable() && mScreenRecordService != null){
mScreenRecordService.clearAll();
mScreenRecordService = null;
}
if (mRecordListener != null && mRecordListener.size() > 0){
mRecordListener.clear();
}
if (mPageRecordListener != null && mPageRecordListener.size() > 0 ){
mPageRecordListener.clear();
}
}
public static void startScreenRecord(Activity activity,int requestCode) {
Log.d(TAG,"startScreenRecord isScreenRecordEnable() = "+isScreenRecordEnable()+" mScreenRecordService = "+mScreenRecordService);
clearRecordElement();
if (isScreenRecordEnable()){
if (mScreenRecordService != null && !mScreenRecordService.ismIsRunning()){
if (!mScreenRecordService.isReady()){
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) activity.
getSystemService(Context.MEDIA_PROJECTION_SERVICE);
if (mediaProjectionManager != null){
Intent intent = mediaProjectionManager.createScreenCaptureIntent();
PackageManager packageManager = activity.getPackageManager();
if (packageManager.resolveActivity(intent,PackageManager.MATCH_DEFAULT_ONLY) != null){
Log.d(TAG,"startScreenRecord start");
activity.startActivityForResult(intent,requestCode);
}else {
Toast.makeText(activity,R.string.can_not_record_tip,Toast.LENGTH_SHORT).show();
}
}
} else {
mScreenRecordService.startRecord();
}
}
}
}
/**
* After obtaining the user permission screen, set the necessary data.
* @param resultCode
* @param resultData
*/
public static void setUpData(int resultCode,Intent resultData) throws Exception{
if (isScreenRecordEnable()){
if (mScreenRecordService != null && !mScreenRecordService.ismIsRunning()){
mScreenRecordService.setResultData(resultCode,resultData);
mScreenRecordService.startRecord();
}
}
}
/**
* stop record screen
*/
public static void stopScreenRecord(Context context){
Log.d(TAG,"stopScreenRecord mScreenRecordService = "+isScreenRecordEnable());
if (isScreenRecordEnable()){
if(mScreenRecordService != null)
Log.d(TAG,"stopScreenRecord mScreenRecordService.ismIsRunning() = "+mScreenRecordService.ismIsRunning());
if (mScreenRecordService != null && mScreenRecordService.ismIsRunning()){
String str = context.getString(R.string.record_video_tip);
mScreenRecordService.stopRecord(str);
}
}
}
public static void stopScreenRecord(){
Log.d(TAG,"stopScreenRecord mScreenRecordService = "+isScreenRecordEnable(),new Throwable());
if (isScreenRecordEnable()){
if(mScreenRecordService != null)
Log.d(TAG,"stopScreenRecord mScreenRecordService.ismIsRunning() = "+mScreenRecordService.ismIsRunning());
if (mScreenRecordService != null && mScreenRecordService.ismIsRunning()){
mScreenRecordService.stopRecord("stop");
}
}
}
public static boolean isRecordScreen(){
if (mScreenRecordService != null && mScreenRecordService.ismIsRunning()){
return true;
}
return false;
}
/**
* record file save path
* @return
*/
public static String getScreenRecordFilePath(){
if (isScreenRecordEnable() && mScreenRecordService!= null) {
return mScreenRecordService.getRecordFilePath();
}
return null;
}
/**
* Determine whether or not it is currently being recorded
* @return
*/
public static boolean isCurrentRecording(){
if (isScreenRecordEnable() && mScreenRecordService!= null) {
return mScreenRecordService.ismIsRunning();
}
return false;
}
/**
* true,The hint at the end of the recording is showing
* @return
*/
public static boolean isRecodingTipShow(){
return mIsRecordingTipShowing;
}
public static void setRecordingStatus(boolean isShow){
mIsRecordingTipShowing = isShow;
}
/**
* The system is recording, the app screen will be in conflict, and some data will be cleaned up.
*/
public static void clearRecordElement(){
if (isScreenRecordEnable()){
if (mScreenRecordService != null ){
mScreenRecordService.clearRecordElement();
}
}
}
public static void addRecordListener(RecordListener listener){
if (listener != null && !mRecordListener.contains(listener)){
mRecordListener.add(listener);
}
}
public static void removeRecordListener(RecordListener listener){
if (listener != null && mRecordListener.contains(listener)){
mRecordListener.remove(listener);
}
}
public static void addPageRecordListener( OnPageRecordListener listener){
if (listener != null && !mPageRecordListener.contains(listener)){
mPageRecordListener.add(listener);
}
}
public static void removePageRecordListener( OnPageRecordListener listener){
if (listener != null && mPageRecordListener.contains(listener)){
mPageRecordListener.remove(listener);
}
}
public static void onPageRecordStart(){
if (mPageRecordListener!= null && mPageRecordListener.size() > 0 ){
for (OnPageRecordListener listener : mPageRecordListener){
listener.onStartRecord();
}
}
}
public static void onPageRecordStop(){
if (mPageRecordListener!= null && mPageRecordListener.size() > 0 ){
for (OnPageRecordListener listener : mPageRecordListener){
listener.onStopRecord();
}
}
}
public static void onPageBeforeShowAnim(){
if (mPageRecordListener!= null && mPageRecordListener.size() > 0 ){
for (OnPageRecordListener listener : mPageRecordListener){
listener.onBeforeShowAnim();
}
}
}
public static void onPageAfterHideAnim(){
if (mPageRecordListener!= null && mPageRecordListener.size() > 0 ){
for (OnPageRecordListener listener : mPageRecordListener){
listener.onAfterHideAnim();
}
}
}
public static void startRecord(){
if (mRecordListener.size() > 0 ){
for (RecordListener listener : mRecordListener){
listener.onStartRecord();
}
}
}
public static void pauseRecord(){
if (mRecordListener.size() > 0 ){
for (RecordListener listener : mRecordListener){
listener.onPauseRecord();
}
}
}
public static void resumeRecord(){
if (mRecordListener.size() > 0 ){
for (RecordListener listener : mRecordListener){
listener.onResumeRecord();
}
}
}
public static void onRecording(String timeTip){
if (mRecordListener.size() > 0 ){
for (RecordListener listener : mRecordListener){
listener.onRecording(timeTip);
}
}
}
public static void stopRecord(String stopTip){
if (mRecordListener.size() > 0 ){
for (RecordListener listener : mRecordListener){
listener.onStopRecord( stopTip);
}
}
}
public interface RecordListener{
void onStartRecord();
void onPauseRecord();
void onResumeRecord();
void onStopRecord(String stopTip);
void onRecording(String timeTip);
}
public interface OnPageRecordListener {
void onStartRecord();
void onStopRecord();
void onBeforeShowAnim();
void onAfterHideAnim();
}
}
2.录屏文件管理类FileUtil.java
package com.android.systemui.util;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import java.io.File;
public class FileUtil {
/**
* Delete files or directories in the SD card
*
* @param path
* @return
*/
public static boolean deleteSDFile(String path) {
return deleteSDFile(path, false);
}
/**
* Delete files or directories in the SD card
*
* @param path
* @param deleteParent true为删除父目录
* @return
*/
public static boolean deleteSDFile(String path, boolean deleteParent) {
if (TextUtils.isEmpty(path)) {
return false;
}
File file = new File(path);
if (!file.exists()) {
return true;
}
return deleteFile(file, deleteParent);
}
/**
*Create files or directories in the SD card
*
* *@param path
* @return
*/
public static boolean createSDFile(String path) {
if (TextUtils.isEmpty(path)) {
return false;
}
File file = new File(path);
if (!file.exists()) {
file.mkdirs();
return true;
}
return true;
}
/**
* @param file
* @param deleteParent true is delete parent directories
* @return
*/
public static boolean deleteFile(File file, boolean deleteParent) {
boolean flag = false;
if (file == null) {
return flag;
}
if (file.isDirectory()) {
//directories
File[] files = file.listFiles();
if (files.length > 0) {
for (int i = 0; i < files.length; i++) {
flag = deleteFile(files[i], true);
if (!flag) {
return flag;
}
}
}
if (deleteParent) {
flag = file.delete();
}
} else {
flag = file.delete();
}
file = null;
return flag;
}
/**
* Add to the media database
*
* @param context
*/
public static Uri fileScanVideo(Context context, String videoPath, int videoWidth, int videoHeight,
int videoTime) {
File file = new File(videoPath);
if (file.exists()) {
Uri uri = null;
long size = file.length();
String fileName = file.getName();
long dateTaken = System.currentTimeMillis();
ContentValues values = new ContentValues(11);
values.put(MediaStore.Video.Media.DATA, videoPath); // path;
values.put(MediaStore.Video.Media.TITLE, fileName); // title;
values.put(MediaStore.Video.Media.DURATION, videoTime * 1000); // time
values.put(MediaStore.Video.Media.WIDTH, videoWidth); // width
values.put(MediaStore.Video.Media.HEIGHT, videoHeight); // height
values.put(MediaStore.Video.Media.SIZE, size); // size;
values.put(MediaStore.Video.Media.DATE_TAKEN, dateTaken); // date;
values.put(MediaStore.Video.Media.DISPLAY_NAME, fileName);// filename;
values.put(MediaStore.Video.Media.DATE_MODIFIED, dateTaken / 1000);// modify time;
values.put(MediaStore.Video.Media.DATE_ADDED, dateTaken / 1000); // add time;
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
ContentResolver resolver = context.getContentResolver();
if (resolver != null) {
try {
uri = resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
} catch (Exception e) {
e.printStackTrace();
uri = null;
}
}
if (uri == null) {
MediaScannerConnection.scanFile(context, new String[]{videoPath}, new String[]{"video/*"}, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
}
});
}
return uri;
}
return null;
}
/**
* The SD card exists and can be used
*/
public static boolean isSDExists() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
/**
* The residual capacity of the SD card is obtained, the unit is Byte
*
* @return
*/
public static long getSDFreeMemory() {
try {
if (isSDExists()) {
File pathFile = Environment.getExternalStorageDirectory();
// Retrieve overall information about the space on a filesystem.
// This is a Wrapper for Unix statfs().
StatFs statfs = new StatFs(pathFile.getPath());
// Get the SIZE of every block on the SDCard
long nBlockSize = statfs.getBlockSize();
// Getting the number of Block used by the program
// long nAvailBlock = statfs.getAvailableBlocksLong();
long nAvailBlock = statfs.getAvailableBlocks();
// Calculating the remaining size of SDCard Byte
long nSDFreeSize = nAvailBlock * nBlockSize;
return nSDFreeSize;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return 0;
}
}
3.CommonUtil.java
package com.android.systemui.util;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Display;
import android.content.Context;
import android.app.Application;
import android.view.WindowManager;
public class CommonUtil {
private static int mScreenWidth;
private static int mScreenHeight;
private static int mScreenDpi;
public static void init(Application activity){
DisplayMetrics metric = new DisplayMetrics();
WindowManager mWindowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.getDefaultDisplay().getMetrics(metric);
mScreenWidth = metric.widthPixels; // 屏幕宽度(像素)
mScreenHeight = metric.heightPixels; // 屏幕宽度(像素)
mScreenDpi = metric.densityDpi;
}
public static int getScreenWidth(){
return mScreenWidth;
}
public static int getScreenHeight(){
return mScreenHeight;
}
public static int getScreenDpi(){
return mScreenDpi;
}
}