如何不通过任何程序而是通过代码截取电话屏幕的选定区域?
这是允许我的屏幕截图存储在 SD 卡上并稍后用于您需要的任何代码的代码:
首先,您需要添加适当的权限来保存文件:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这是代码(在活动中运行):
private void takeScreenshot() { Date now = new Date(); android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); try { // image naming and path to include sd card appending name you choose for file String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg"; // create bitmap screen capture View v1 = getWindow().getDecorView().getRootView(); v1.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); File imageFile = new File(mPath); FileOutputStream outputStream = new FileOutputStream(imageFile); int quality = 100; bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); outputStream.flush(); outputStream.close(); openScreenshot(imageFile); } catch (Throwable e) { // Several error may come out with file handling or DOM e.printStackTrace(); } }
这就是打开最近生成的图像的方法:
private void openScreenshot(File imageFile) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri = Uri.fromFile(imageFile); intent.setDataAndType(uri, "image/*"); startActivity(intent); }
如果您想在片段视图上使用它,请使用:
View v1 = getActivity().getWindow().getDecorView().getRootView();
代替
View v1 = getWindow().getDecorView().getRootView();
关于 takeScreenshot() 函数
注意 :
如果您的对话框包含表面视图,则此解决方案不起作用。有关详细信息,请查看以下问题的答案: