gpt4 book ai didi

android - 检测android中的用户 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:52 24 4
gpt4 key购买 nike

我想检测用户最后一次与屏幕交互的时间。我对做任何恶意软件/ spy 软件的事情不感兴趣,只需要计算自用户上次点击屏幕以来已经过去了多少时间。

目标是实现与键盘锁类似的功能。

我一直在做一些研究,并在网站上进行了一些问答(例如 Android Best Way to Detect and Handle User INACTIVITYAndroid: Detect General Use by User 等),但是当涉及到检测 android 中的用户交互时,我还没有找到我需要的东西。

提前致谢。

最佳答案

经过更多的研究和测试后,我设法找到了解决方案。

我所做的是创建一个后台服务,我在其中获取 WindowManager 的实例并添加一个零大小的 View 以通知用户触及它的外部...但是由于 View 的大小为零,因此每次都可以调用它。为此,我们可以检查 https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

InactivityService.java 类检测用户每次点击屏幕并将其写入首选项,以便稍后在应用程序的其他组件中显示或使用。值得注意的是,我们可以广播时间,或将其传递给我们的应用程序对象或任何其他适合或需要的解决方案。

/**
* Detects user taps on screen (user interaction).
*
* @author Junior Buckeridge A.
*
*/
public class InactivityService extends Service {

protected static final String LOG_TAG = InactivityService.class.getSimpleName();
private boolean isAdded = false;

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

if(!isAdded){
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
0, 0, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
View view = new View(this);
view.setOnTouchListener(new OnTouchListener() {

@SuppressLint("DefaultLocale")
@Override
public boolean onTouch(View v, MotionEvent event) {

GregorianCalendar calendar = new GregorianCalendar();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(InactivityService.this);
String log = prefs.getString(LOG_KEY, "");
log = String.format("User interaction detected at: %02d:%02d:%02d \n%s",
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND),
log);
prefs.edit().putString(LOG_KEY, log).commit();

return false;
}
});
wm.addView(view, params);
}

return START_STICKY;
}
}

我们应该在 list 中添加以下权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

另外值得一提的是,这种方法与使用 ActivityManager 获取正在运行的任务相结合,是确定用户是否正在与手机交互的一种非常有效的方法。

关于android - 检测android中的用户 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21267322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com