在Android 9和更高版本上使用MediaProjection时,需要添加一些额外的权限和代码。
首先,在AndroidManifest.xml文件中添加以下权限:
然后,创建一个Service类来获取MediaProjection:
public class MediaProjectionService extends Service {
private MediaProjectionManager mProjectionManager;
private MediaProjection mMediaProjection;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
Intent captureIntent = mProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, REQUEST_CODE_CAPTURE);
return START_NOT_STICKY;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_CAPTURE && resultCode == RESULT_OK) {
mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data);
// 在这里可以使用MediaProjection进行屏幕捕捉
}
stopSelf();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在你的Activity中,启动Service来获取MediaProjection:
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_MEDIA_PROJECTION = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(permissionIntent, REQUEST_CODE_MEDIA_PROJECTION);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_MEDIA_PROJECTION && resultCode == RESULT_OK) {
Intent serviceIntent = new Intent(this, MediaProjectionService.class);
serviceIntent.putExtra("data", data);
startService(serviceIntent);
}
}
}
这样,你就可以在Android 9+上使用MediaProjection进行屏幕捕捉了。