android截图框固定,Android截图截取弹框AlertDialog

1:效果如图

e77fc8889f6be436bca9b5d20fee4717.png

2:权限

android:minSdkVersion="21"

android:targetSdkVersion="21" />

tools:ignore="ProtectedPermissions" />

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值