Android截圖截取彈框AlertDialog

來源:互聯網
上載者:User

標籤:byte   catch   sts   mirror   ext   prot   save   提示資訊   put   

1:效果

 

2:許可權

   <uses-sdk        android:minSdkVersion="21"        android:targetSdkVersion="21" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"        tools:ignore="ProtectedPermissions" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  

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();    }}

  

 

Android截取彈框AlertDialog

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.