博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android截图截取弹框AlertDialog
阅读量:7260 次
发布时间:2019-06-29

本文共 7230 字,大约阅读时间需要 24 分钟。

1:效果如图

 

2:权限

  

3:实现

public class MainActivity extends AppCompatActivity {    private static final String TAG = "TAGA";    int x = 1;    private static final int REQUEST_MEDIA_PROJECTION = 1;    private MediaProjectionManager projectionManager;    boolean screenCapture = false;    Handler mHandler = new Handler() {        @TargetApi(Build.VERSION_CODES.LOLLIPOP)        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            takeScreenshot2();        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button btn = findViewById(R.id.btn);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                x=1;                showAlertDialog();                mHandler.sendEmptyMessageDelayed(100,1000);            }        });    }    @TargetApi(Build.VERSION_CODES.LOLLIPOP)    @RequiresApi(api = Build.VERSION_CODES.KITKAT)    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == REQUEST_MEDIA_PROJECTION ) {            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);                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 {                                /**                                 * 去掉--->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();                                // 保存路径                                String pathImage = Environment.getExternalStorageDirectory().getPath() + File.separator + "AA" + File.separator;                                String nameImage =  pathImage+"截图示例.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();            }        }    }    /**     * 截图功能调用     */    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)    public void takeScreenshot2() {        try {            projectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);            startActivityForResult(                    projectionManager.createScreenCaptureIntent(),                    REQUEST_MEDIA_PROJECTION);        } catch (Exception e) {            e.printStackTrace();        }    }    public void showAlertDialog() {        AlertDialog.Builder localBuilder = new AlertDialog.Builder(this);        localBuilder.setTitle("简单对话框");        localBuilder.setIcon(R.mipmap.ic_launcher);        localBuilder.setMessage("提示信息?");        localBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {            public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) {                /**                 * 确定操作                 * */            }        });        localBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() {            public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) {                /**                 * 确定操作                 * */            }        });        /***         * 设置点击返回键不会消失         * */        localBuilder.setCancelable(false).create();        localBuilder.show();    }}

  

 

转载于:https://www.cnblogs.com/galibujianbusana/p/8782501.html

你可能感兴趣的文章
“每天都被自己帅到睡不着” 用古文怎么说?
查看>>
Jmeter:Java request
查看>>
美图、魅族、Kylin多个一线案例,尽在周末美图互联网技术沙龙
查看>>
京东X无人超市落户西安大雁塔 全球首个5A景区店诞生
查看>>
全时联网PC能否带动PC市场销量上升?
查看>>
内蒙古喜迎2019年瑞雪 结束“贫雪”症
查看>>
黑白镜头下黄山云海 宛如水墨画境
查看>>
研究:多因素影响粮食安全 应早做规划避免粮食短缺
查看>>
和大牛之间的差距
查看>>
哥斯达黎加巨型石球博物馆升级 新设施4月投用
查看>>
94岁菲律宾首富、SM控股集团主席施至成睡梦中离世
查看>>
必胜客小猪佩奇主题餐厅亮相羊城 年味十足
查看>>
税收盈余前景差 德拟加强向国际大型企业增税
查看>>
区块链热度持续下降,创业公司或将批量死亡
查看>>
日产雷诺联盟2018年全球销量创新高
查看>>
辣评10月自主轿车销量:帝豪下滑 “寒冬”之下取暖还得靠新能源
查看>>
北京铁路局开始办理春运务工团体票
查看>>
Docker折腾记: (3)Docker Compose构建Gitlab,从配置(https,邮箱验证)到基本可用
查看>>
Swift iOS : 使用CocoaPods管理依赖
查看>>
[译] 白雪公主如何帮助 Airbnb 证明在设计中最重要的技能是讲故事
查看>>