1. 第一步:调起系统捕获屏幕的Intent
MainActivity:
public void goCaptureIntent() {
//第一步.调起系统捕获屏幕的Intent
mMediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, SCREEN_SHOT_CODE);
}
2. 第二步:通过startForegroundService来获取mediaProjection
注:sdk 28以及以下可以直接在Activity中获取,29以及以上在Activity中获取会报错
MainActivity:
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==SCREEN_SHOT_CODE && resultCode == RESULT_OK){
//第二步通过startForegroundService来获取mediaProjection
Intent service = new Intent(this, ScreenShootService.class);
service.putExtra("code", resultCode);
service.putExtra("data", data);
service.putExtra("width", getScreenWidth(this));
service.putExtra("height", getScreenHeight(this));
startForegroundService(service);
}
}
3. 第三步:获取mediaProjection
注:AndroidManifest.xml中注册的service要加上以下属性
<service android:name=".ScreenShootService"
android:enabled="true"
android:foregroundServiceType="mediaProjection">
</service>
第三步的代码:
ScreenShootService:
@Override
public int onStartCommand(Intent