如何在 Android 中检测用户不活动?
在显示或包含私人凭据的应用程序(例如社交应用程序、银行应用程序、钱包应用程序等)中检测用户不活动非常重要。在此类应用程序中,有一个登录会话来验证登录凭据。一旦会话开始,用户就可以执行所需的操作。但是,如果屏幕长时间未使用,则应用程序必须开始显示警报或将用户从当前会话中注销,用户不活动是注销的原因。因此,一定有一个计时器或计数器在后台运行,用于计算用户在指定时间内不活动。
因此,通过本文,我们将向您展示如何通过了解用户上次触摸屏幕的时间并立即启动特定时间的计数器来检测用户不活动。
分步实施
第 1 步:在 Android Studio 中创建一个新项目
要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。我们在 Kotlin 中演示了该应用程序,因此请确保在创建新项目时选择 Kotlin 作为主要语言。
步骤 2:使用 activity_main.xml 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。将布局的背景更改为较深的颜色。我们将背景更改为黑色,因为我们想在屏幕上显示触摸印象。
XML
Kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.MotionEvent
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
class MainActivity : AppCompatActivity() {
// Declaring handler, runnable and time in milli seconds
private lateinit var mHandler: Handler
private lateinit var mRunnable: Runnable
private var mTime: Long = 2000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initializing the handler and the runnable
mHandler = Handler(Looper.getMainLooper())
mRunnable = Runnable {
Toast.makeText(applicationContext, "User inactive for ${mTime/1000} secs!", Toast.LENGTH_SHORT).show()
}
// Start the handler
startHandler()
}
// When the screen is touched or motion is detected
override fun onTouchEvent(event: MotionEvent?): Boolean {
// Removes the handler callbacks (if any)
stopHandler()
// Runs the handler (for the specified time)
// If any touch or motion is detected before
// the specified time, this override function is again called
startHandler()
return super.onTouchEvent(event)
}
// start handler function
private fun startHandler(){
mHandler.postDelayed(mRunnable, mTime)
}
// stop handler function
private fun stopHandler(){
mHandler.removeCallbacks(mRunnable)
}
}
步骤 3:使用MainActivity.kt 文件
转到MainActivity.kt文件并参考以下代码。下面是MainActivity.kt文件的代码。代码中添加了注释以更详细地理解代码。
科特林
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.MotionEvent
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
class MainActivity : AppCompatActivity() {
// Declaring handler, runnable and time in milli seconds
private lateinit var mHandler: Handler
private lateinit var mRunnable: Runnable
private var mTime: Long = 2000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Initializing the handler and the runnable
mHandler = Handler(Looper.getMainLooper())
mRunnable = Runnable {
Toast.makeText(applicationContext, "User inactive for ${mTime/1000} secs!", Toast.LENGTH_SHORT).show()
}
// Start the handler
startHandler()
}
// When the screen is touched or motion is detected
override fun onTouchEvent(event: MotionEvent?): Boolean {
// Removes the handler callbacks (if any)
stopHandler()
// Runs the handler (for the specified time)
// If any touch or motion is detected before
// the specified time, this override function is again called
startHandler()
return super.onTouchEvent(event)
}
// start handler function
private fun startHandler(){
mHandler.postDelayed(mRunnable, mTime)
}
// stop handler function
private fun stopHandler(){
mHandler.removeCallbacks(mRunnable)
}
}
输出:
您可以看到,如果屏幕保持 2 秒钟未触碰,应用程序会显示一条有关用户不活动的消息。