Android截图<包括Alertdiaog>

1.使用的系统内部的截屏方法……

2.

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    View view1;
    int x=1;
    private static final int REQUEST_MEDIA_PROJECTION = 1;
    private MediaProjectionManager projectionManager;
    boolean screenCapture = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {

         AlertDialog.Builder localBuilder = new AlertDialog.Builder(this);
        localBuilder.setTitle("自定义列表对话框").setIcon(R.mipmap.ic_launcher);
         view1=getLayoutInflater().inflate(R.layout.layout, null);
        localBuilder.setView(getLayoutInflater().inflate(R.layout.layout, null));
        localBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt)
            {
                /**
                 *
                 * 操作
                 * */
                // 获取屏幕
                screenCapture = true;
                x=1;
                takeScreenshot2();
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


            }
        }).setNegativeButton("取消", new DialogInterface.OnClickListener()
        {
            public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt)
            {
                /**
                 *
                 * 操作
                 * */

            }
        }).create().show();

    }

    public void takeScreenshot2() {
        try {
            projectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
            startActivityForResult(
                    projectionManager.createScreenCaptureIntent(),
                    REQUEST_MEDIA_PROJECTION);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REQUEST_MEDIA_PROJECTION && screenCapture==true) {
            /**
             *
             */


            try {
                final int mWidth = getWindowManager().getDefaultDisplay().getWidth();
                final int mHeight = getWindowManager().getDefaultDisplay().getHeight();
                final ImageReader mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 2);
                DisplayMetrics metrics = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(metrics);
                int mScreenDensity = metrics.densityDpi;
                final MediaProjection mProjection = projectionManager.getMediaProjection(-1, data);
                Log.i(TAG, "onActivityResult2: "+screenCapture+"**"+x);
                final VirtualDisplay virtualDisplay = mProjection.createVirtualDisplay("screen-mirror",
                        mWidth, mHeight, mScreenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                        mImageReader.getSurface(), null, null);
                mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
                    @Override
                    public void onImageAvailable(ImageReader reader) {
                        if(x!=1){
                            return;
                        }
                        else{
                            try {
                                Log.i(TAG, "onActivityResult3: "+screenCapture+"**"+x);
                                /**
                                 * 去掉--->mProjection.stop(); 会出现不停的截图现象
                                 */
                                x=2;
                                mProjection.stop();
                                Image image = mImageReader.acquireLatestImage();
                                final Image.Plane[] planes = image.getPlanes();
                                final ByteBuffer buffer = planes[0].getBuffer();
                                int offset = 0;
                                int pixelStride = planes[0].getPixelStride();
                                int rowStride = planes[0].getRowStride();
                                int rowPadding = rowStride - pixelStride * mWidth;
                                Bitmap bitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888);
                                bitmap.copyPixelsFromBuffer(buffer);
                                image.close();
                                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss");
                                String strDate = dateFormat.format(new java.util.Date());
                                /**
                                 * 截图的保存路径……
                                 */
                                String pathImage = Environment.getExternalStorageDirectory().getPath() + "/";
                                /**
                                 * 截图名称……
                                 */
                                String nameImage = pathImage + strDate + ".png";
                                if (bitmap != null) {
                                    try {
                                        File fileImage = new File(nameImage);
                                        if (!fileImage.exists()) {
                                            fileImage.createNewFile();
                                        }
                                        FileOutputStream out = new FileOutputStream(fileImage);
                                        if (out != null) {
                                            bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                                            out.flush();
                                            out.close();
                                            Toast.makeText(MainActivity.this, "图片保存成功!", Toast.LENGTH_SHORT).show();
                                            Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                                            Uri contentUri = Uri.fromFile(fileImage);
                                            media.setData(contentUri);
                                            getApplicationContext().sendBroadcast(media);
                                            screenCapture = false;
                                        }
                                    } catch (FileNotFoundException e) {
                                        e.printStackTrace();
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                                } else {
                                    Toast.makeText(MainActivity.this, "cannot get phone's screen", Toast.LENGTH_SHORT).show();

                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }

                    }
                }, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
            /**
             *
             */
        }


    }






}

 

posted @ 2017-02-12 18:16  咖喱不见不散啊  阅读(605)  评论(0编辑  收藏  举报