包括:截圖不包括當前頁面的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
}
}
}