安卓java录屏_安卓实现截屏以及录屏功能Demo

【实例简介】安卓实现截屏以及录屏功能Demo 安卓实现截屏以及录屏功能Demo

【实例截图】

【核心代码】

package com.dzjin.screen.screenshotandrecorddemo;

import android.content.Context;

import android.content.Intent;

import android.graphics.Bitmap;

import android.media.projection.MediaProjectionManager;

import android.os.Environment;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.KeyEvent;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.Toast;

import java.io.FileOutputStream;

import java.text.SimpleDateFormat;

import java.util.Date;

public class MainActivity extends AppCompatActivity {

private LinearLayout linearLayout=null;

private Button buttonRecord=null;

private Button buttonCapture=null;

private boolean isRecord=false;

private int mScreenWidth;

private int mScreenHeight;

private int mScreenDensity;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

getScreenBaseInfo();

linearLayout=(LinearLayout)findViewById(R.id.linearLayout);

buttonRecord=(Button)findViewById(R.id.buttonRecord);

buttonCapture=(Button)findViewById(R.id.buttonCapture);

buttonRecord.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if(isRecord){

stopScreenRecord();

}else{

startScreenRecord();

}

}

});

buttonCapture.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

capture(linearLayout);

}

});

}

@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(MainActivity.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);

Toast.makeText(this,"录屏开始",Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(this,"录屏失败",Toast.LENGTH_SHORT).show();

}

}

}

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

isRecord=true;

buttonRecord.setText(new String("停止录屏"));

}

//stop screen record.

private void stopScreenRecord(){

Intent service = new Intent(this, ScreenRecordService.class);

stopService(service);

isRecord=false;

buttonRecord.setText(new String("开始录屏"));

Toast.makeText(this,"录屏成功",Toast.LENGTH_SHORT).show();

}

public void capture(View v){

//格式化时间作为截屏文件名

SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YY-MM-DD-HH-MM-SS");

//在获取外部存储的时候,一定注意添加权限,如果添加权限还不能成功,则手动在应用中开启权限。

String filePathName= Environment.getExternalStorageDirectory() "/" simpleDateFormat.format(new Date()) ".png";

//Find the topmost view in the current view hierarcht.

View view=v.getRootView();

// Enable or disable drawing cache.

view.setDrawingCacheEnabled(true);

// Calling this method is equivalent to calling buildDrawingCache(false);

// In order to force drawing cache to be buuild.

view.buildDrawingCache();

//Calling this method is equivalent to calling getDrawingCache(false);

//Return the Bitmap in which this view drawing is cached.

Bitmap bitmap=view.getDrawingCache();

try{

System.out.println(filePathName);

FileOutputStream fileOutputStream=new FileOutputStream(filePathName);

//Write a compressed version of bitmap to specified outputStream.

bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);

Toast.makeText(this,"Cpature Succeed",Toast.LENGTH_SHORT).show();

}catch (Exception e){

e.printStackTrace();

Toast.makeText(this,"Cpature Failed",Toast.LENGTH_SHORT).show();

}

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// 在这里将BACK键模拟了HOME键的返回桌面功能(并无必要)

if (keyCode == KeyEvent.KEYCODE_BACK) {

simulateHome();

return true;

}

return super.onKeyDown(keyCode, event);

}

/**

* 获取屏幕基本信息

*/

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;

}

/**

* 模拟HOME键返回桌面的功能

*/

private void simulateHome() {

//Intent.ACTION_MAIN,Activity Action: Start as a main entry point, does not expect to receive data.

Intent intent = new Intent(Intent.ACTION_MAIN);

//If set, this activity will become the start of a new task on this history stack.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//This is the home activity, that is the first activity that is displayed when the device boots.

intent.addCategory(Intent.CATEGORY_HOME);

this.startActivity(intent);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值