截图空指针。
import android.app.*;
import android.os.*;
import android.graphics.*;
import java.io.*;
import android.content.*;
import android.media.projection.*;
import android.hardware.display.*;
import android.media.*;
import android.content.res.*;
import java.nio.*;
import android.view.*;
public class ScreenCaptureActivity extends Activity
{
private int[] viewPos;
@Override
protected void onCreate(Bundle savedInstanceState)
{
Intent intent = getIntent();
viewPos = intent.getIntArrayExtra("viewpos");
super.onCreate(savedInstanceState);
startActivityForResult(((MediaProjectionManager) getSystemService("media_projection")).createScreenCaptureIntent(),1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO: Implement this method
super.onActivityResult(requestCode, resultCode, data);
if(1==requestCode)
if (resultCode == -1 && data != null) {
parseData(data);
}
}
private void parseData(Intent data){
MediaProjectionManager mpm = (MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_SERVICE);
MediaProjection mMediaProjection = mpm.getMediaProjection(Activity.RESULT_OK,data);
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
final ImageReader mImageReader = ImageReader.newInstance(width,height,PixelFormat.RGBA_8888,1);
VirtualDisplay mVirtualDisplay = mMediaProjection.createVirtualDisplay(
"screen-mirror",
width,
height,
Resources.getSystem().getDisplayMetrics().densityDpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mImageReader.getSurface(),
null,
null
);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try{
SystemClock.sleep(1000);
Image image = mImageReader.acquireLatestImage();
int width = image.getWidth();
int height = image.getHeight();
Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * width;
Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
image.close();
File imagefile = new File(MessageReceiveService.WORK_PATH+"tmp.png");
if(!imagefile.exists())
imagefile.createNewFile();
FileOutputStream fos = new FileOutputStream(imagefile);
bitmap = Bitmap.createBitmap(bitmap,viewPos[0],viewPos[1],viewPos[2]-viewPos[0],viewPos[3]-viewPos[1]);
bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
fos.flush();
fos.close();
}catch(Exception e){
MessageReceiveService.Log(e.toString());
}
}
}, 300);
mVirtualDisplay.release();
mVirtualDisplay = null;
}
}