diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ed48cb0..bf5d0b9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,10 +33,6 @@
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
 
-    <!--写时钟权限-->
-    <uses-permission
-            android:name="android.permission.WRITE_SETTINGS"
-            serviceandroid:ignore="ProtectedPermissions"/>
     <uses-permission
             android:name="android.permission.WRITE_SECURE_SETTINGS"
             serviceandroid:ignore="ProtectedPermissions"/>
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 0e959eb..3a336af 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -173,6 +173,7 @@
     @SuppressLint("SetTextI18n")
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {
         if (event.action == KeyEvent.ACTION_DOWN) {
+            presenter.resetOperationTime()
             when (payMode) {
                 PayMode.FIXPAY -> fixInputPay(event.keyCode)
                 PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)
@@ -305,6 +306,14 @@
         }
     }
 
+    override fun screenSaver(flag: Boolean) {
+        if (flag) {
+            CommonUtil.setAppBrightness(this, PublicDef.SCREEN_SAVER_BRIGHTNESS)
+        } else {
+            CommonUtil.setAppBrightness(this, PublicDef.SCREEN_NORMAL_BRIGHTNESS)
+        }
+    }
+
     private var lastshowtime: String? = null
     override fun clearUserInfo(datetime: String) {
         if (!isBackRunning) {
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
index 6c5d277..4c8340c 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -44,23 +44,24 @@
                     PublicDef.MSG_CARD_PAY_QUERY -> iConsumeView.showConsumeQuery(msg.obj as String)
                     PublicDef.MSG_CARD_PAY_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "pay fail,reason=$ret")
                         iConsumeView.showConsumeFail(ret)
                     }
                     PublicDef.MSG_PAYING_INTERRUPT -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "pay interrupt,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "pay interrupt,reason=$ret")
                         iConsumeView.showConsumeInterrupt(ret)
                     }
                     PublicDef.MSG_CARD_REVERSE_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
-                        LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
+                        LogUtil.d(TAG, "reverse fail,reason=$ret")
                         iConsumeView.showReverseFail(msg.obj as CardUserInfoBean)
                     }
                     PublicDef.MSG_CARD_REVERSE_SUC -> iConsumeView.showReverseSuc(msg.obj as CardUserInfoBean)
                     PublicDef.MSG_USER_INFO_SHOW -> iConsumeView.showUserInfo(msg.obj as CardUserInfoBean)
                     PublicDef.MSG_USER_INFO_CLEAR -> iConsumeView.clearUserInfo(msg.obj as String)
                     PublicDef.MSG_LINK_STATUS -> iConsumeView.refreshLinkStatus(msg.obj as Boolean)
+                    PublicDef.MSG_SCREEN_SAVER -> iConsumeView.screenSaver((msg.obj as String) == "on")
                 }
             }
         }
@@ -90,6 +91,10 @@
         cardPayService.clickToInterrupt()
     }
 
+    fun resetOperationTime() {
+        cardPayService.resetOperationTime()
+    }
+
     fun setFixMode(isFixMode: Boolean) {
         cardPayService.isFixMode = isFixMode
         codePayService.isFixMode = isFixMode
diff --git a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
index 3ac4df7..3561af7 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -38,4 +38,6 @@
      * 是否正在刷卡支付
      */
     fun cardPayingStatus(isPaying: Boolean)
+
+    fun screenSaver(flag: Boolean)
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
index 047d57b..286b664 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
@@ -21,6 +21,10 @@
     var transdate: String? = null
     var transtime: String? = null
     var payway: String? = null //card,code
+
+    override fun toString(): String {
+        return "name=$username,cardno=$cardno,amount=$amount,payway=$payway,retcode=$retcode,retmsg=$retmsg"
+    }
 }
 
 enum class CardStatus(val desc: String) {
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
new file mode 100644
index 0000000..bcbf64e
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/ScreenSaverBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.activities.consume.bean
+
+/**
+ ** create by zzq on 2019/11/5
+ ** @desc 屏保参数
+ **/
+class ScreenSaverBean {
+    var operationTime = 0L //ms
+    var operationFlag = false //是否操作
+    var flag = false //是否屏保
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index b00585f..5266df9 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -39,7 +39,14 @@
     /**
      * 防止定额连续消费
      */
-    private var lastPayBean = LastPayBean()
+    private val lastPayBean = LastPayBean()
+    @Volatile
+    private var operation = false
+    private val screenSaverBean = ScreenSaverBean()
+
+    init {
+        screenSaverBean.operationTime = System.currentTimeMillis()
+    }
 
     fun start() {
         isExist = false
@@ -75,6 +82,10 @@
         payQueryConfirm = false
     }
 
+    fun resetOperationTime() {
+        operation = true
+    }
+
     private inner class CardPayRunnable : Runnable {
         private lateinit var onlRecord: TransdtlOnlineRecord
         private lateinit var onlRvsRecord: TransdtlOnlineRecord
@@ -89,9 +100,9 @@
         override fun run() {
             while (!isExist) {
                 iConsumeView.cardPayingStatus(false)
+                checkShowScreen()
                 if (iConsumeView.isBackRunning()) {
                     CommonUtil.doSleep(1000)
-                    doClear()
                     continue
                 }
                 CommonUtil.doSleep(100)
@@ -188,6 +199,31 @@
             }
         }
 
+        private fun checkShowScreen() {
+            val tt = System.currentTimeMillis()
+            if (operation) {
+                operation = false
+                screenSaverBean.operationTime = tt
+                screenSaverBean.operationFlag = true
+            }
+            if (tt > screenSaverBean.operationTime &&
+                tt - screenSaverBean.operationTime > PublicDef.SCREEN_SAVER_GAP
+            ) {
+                /**
+                 * 连续半小时无操作屏保
+                 */
+                screenSaverBean.operationTime = tt
+                screenSaverBean.flag = true
+                screenSaverBean.operationFlag = false
+                sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")
+            } else {
+                if (screenSaverBean.operationFlag && screenSaverBean.flag) {
+                    screenSaverBean.flag = false
+                    sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")
+                }
+            }
+        }
+
         private fun showCardUserInfo() {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
             if (cardBean!!.username != cardBean!!.cardNo) {
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 917f39c..253a752 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -5,6 +5,7 @@
 import android.annotation.SuppressLint
 import android.app.Activity
 import android.app.ActivityManager
+import android.content.ContentResolver
 import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
@@ -12,6 +13,7 @@
 import android.os.Build
 import android.os.PowerManager
 import android.provider.Settings
+import android.view.WindowManager
 import android.widget.EditText
 import com.supwisdom.activities.SPApplication
 import java.io.File
@@ -191,4 +193,95 @@
             else -> " "
         }
     }
+
+    /**
+     * @param activity
+     * @param brightness [1-255]
+     * @desc 根据亮度值修改当前window亮度
+     */
+    fun setAppBrightness(activity: Activity, brightness: Int) {
+        val window = activity.window
+        val lp = window.attributes
+        if (brightness == -1) {
+            if (lp.screenBrightness < 0) {
+                /**
+                 * 已经是正常亮度
+                 */
+                return
+            }
+            lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
+        } else {
+            if (lp.screenBrightness > 0) {
+                /**
+                 * 已经屏保亮度
+                 */
+                return
+            }
+//            stopAutoBrightness(activity)
+            lp.screenBrightness = (if (brightness <= 0) 1 else brightness) / 255f
+        }
+        window.attributes = lp
+        /**
+         * 生效？
+         */
+//        getActivityBrightness(activity)
+    }
+
+    /**
+     * 获取当前activity的屏幕亮度
+     *
+     * @param activity 当前的activity对象
+     * @return 亮度值范围为0-0.1f，如果为-1.0，则亮度与全局同步。
+     */
+    private fun getActivityBrightness(activity: Activity): Float {
+        val localWindow = activity.window
+        val params = localWindow.attributes
+        return params.screenBrightness
+    }
+
+    /**
+     * 判断是否开启了自动亮度调节
+     * *
+     * * @param aContext
+     * * @return
+     *      
+     */
+    private fun isAutoBrightness(aContentResolver: ContentResolver): Boolean {
+        try {
+            return Settings.System.getInt(
+                aContentResolver,
+                Settings.System.SCREEN_BRIGHTNESS_MODE
+            ) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+        } catch (e: Settings.SettingNotFoundException) {
+            e.printStackTrace()
+        }
+
+        return false
+    }
+
+    /**
+     * 停止自动亮度调节
+     *
+     * @param activity
+     */
+    private fun stopAutoBrightness(activity: Activity) {
+        Settings.System.putInt(
+            activity.contentResolver,
+            Settings.System.SCREEN_BRIGHTNESS_MODE,
+            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
+        )
+    }
+
+    /**
+     * 开启亮度自动调节
+     *
+     * @param activity
+     */
+    private fun startAutoBrightness(activity: Activity) {
+        Settings.System.putInt(
+            activity.contentResolver,
+            Settings.System.SCREEN_BRIGHTNESS_MODE,
+            Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+        )
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 140f9a8..18c7074 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -33,8 +33,15 @@
     const val MSG_LINK_STATUS = 19
     const val MSG_PAYING_QUERY = 20
     const val MSG_PAYING_INTERRUPT = 21
+    const val MSG_SCREEN_SAVER = 22
     /*************************不能重复*****************************/
     /**
+     * 屏保亮度
+     */
+    const val SCREEN_SAVER_BRIGHTNESS = 1
+    const val SCREEN_NORMAL_BRIGHTNESS = -1
+    const val SCREEN_SAVER_GAP: Long = 30 * 60 * 1000
+    /**
      * 卡消费标志(1 byte)
      */
     /*high 4 bit*/
