包括:截图不包括当前页面的dialog,截图包括dialog,获取屏幕像素,保存图片到系统相册,将bitmap转为base64字符串
class ScreenUtils private constructor() {
companion object {
/**
* 当前页面截屏 不包括dialog
*
* @param activity
* @return
*/
fun screenShotWithoutDialog(activity: Activity): Bitmap? {
// 获取windows中最顶层的view
val view = activity.window.decorView
//允许当前窗口保存缓存信息
view.isDrawingCacheEnabled = true
view.buildDrawingCache()
val windowManager = activity.windowManager
//获取屏幕宽和高
val outMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(outMetrics)
val width = outMetrics.widthPixels
val height = outMetrics.heightPixels
val bitmap = Bitmap.createBitmap(view.drawingCache, 0, 0, width, height)
var bitmapStr = bitmapToBase64(bitmap)
//销毁缓存信息
view.destroyDrawingCache()
view.isDrawingCacheEnabled = false
return bitmap
}
/**
* 当前页面截屏 包括dialog
*
* @param activity
* @return
*/
fun screenShotWithDialog(activity: Activity): Bitmap? {
val bitmap = Falcon.takeScreenshotBitmap(activity)
return bitmap
}
/**
* 获取屏幕像素
*
* @param activity
* @return array[0]:widthPixels ; array[1]:heightPixels
*/
fun getScreenDensity(activity: Activity): IntArray? {
val windowManager = activity.windowManager
val outMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(outMetrics)
val width = outMetrics.widthPixels
val height = outMetrics.heightPixels
val densityArrary: IntArray? = IntArray(2)
densityArrary?.set(0, width)
densityArrary?.set(1, height)
return densityArrary
}
/**
* 保存图片到系统路径
*
* @param bitmap
* @param activity
* @param name 图片名称
*/
fun saveBitmapToDCIM(bitmap: Bitmap?, activity: Activity, name: String) {
var PATH: String =
Environment.getExternalStorageDirectory().absolutePath + File.separator +
Environment.DIRECTORY_DCIM + File.separator + "Camera" + File.separator
val fileName = "$name.png"
val f = File(PATH, fileName)
if (f.exists()) {
f.delete()
} else {
f.mkdirs()
f.delete()
}
try {
val out = FileOutputStream(f)
bitmap?.compress(Bitmap.CompressFormat.PNG, 100, out)
out.flush()
out.close()
//保存图片后发送广播通知更新数据库
val uri = Uri.fromFile(f)
activity.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri))
} catch (e: IOException) {
e.printStackTrace()
} finally {
bitmap?.recycle()
}
}
/**
* bitmap 转base64字符串
*
* @param bitmap
*/
fun bitmapToBase64(bitmap: Bitmap?): String? {
var bmpStr: String? = null
var bmpOs: ByteArrayOutputStream? = null
try {
if (bitmap != null) {
bmpOs = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bmpOs)
bmpOs.flush()
bmpOs.close()
bmpStr = Base64.encodeToString(bmpOs.toByteArray(), Base64.DEFAULT)
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
try {
bmpOs?.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
return bmpStr
}
}
}