我正在尝试使用 Accessiblity Service 检测屏幕任何区域的长按,我已经设置了代码,但它不起作用..任何帮助将不胜感激
** 无障碍服务
class RecentAppsAccessibilityService : AccessibilityService() {
private var touchStartTime: Long = 0
private val longPressThreshold = 500
private val lockedApps = mutableSetOf<String>()
private lateinit var database: DatabaseReference
private val appPinCodes = mutableMapOf<String, String>()
companion object {
private const val TAG = "RecentAppsService"
}
override fun onCreate() {
super.onCreate()
database = FirebaseDatabase.getInstance().reference
fetchLockedPackages()
}
private fun fetchLockedPackages() {
database.child("childApp").addValueEventListener(object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
appPinCodes.clear() // Clear previous data
for (childSnapshot in dataSnapshot.children) {
val packageName = childSnapshot.child("package_name").getValue(String::class.java) ?: ""
val pinCode = childSnapshot.child("pin_code").getValue(String::class.java) ?: ""
if (packageName.isNotEmpty() && pinCode.isNotEmpty()) {
appPinCodes[packageName] = pinCode
lockedApps.add(packageName)
}
}
Log.d(TAG, "Updated locked apps: $lockedApps")
}
override fun onCancelled(databaseError: DatabaseError) {
Log.e("FirebaseError", "Error fetching data: ${databaseError.message}")
}
})
}
override fun onAccessibilityEvent(event: AccessibilityEvent) {
Log.d(TAG, "Event received: ${event.eventType}")
when (event.eventType) {
AccessibilityEvent.TYPE_TOUCH_INTERACTION_START -> {
touchStartTime = System.currentTimeMillis()
}
AccessibilityEvent.TYPE_TOUCH_INTERACTION_END -> {
val touchDuration = System.currentTimeMillis() - touchStartTime
if (touchDuration >= longPressThreshold) {
Log.d(TAG, "Long Press Detected")
// showPartialOverlay()
}
}
}
}
}
// 清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.SET_COMPONENT_ENABLED_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
tools:ignore="ProtectedPermissions" />
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.LockCompose"
tools:targetApi="31">
<service android:name=".FirebaseListenerService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="specialUse"/>
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.LockCompose">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".x.RecentAppsAccessibilityService"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
</application>
</manifest>
// 服务配置
<accessibility-service android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken"
android:accessibilityFlags="flagDefault"
android:canRequestFilterKeyEvents="true"
android:notificationTimeout="100"
android:packageNames="com.app.lockcomposeChild"
android:canRetrieveWindowContent="true"
xmlns:android="http://schemas.android.com/apk/res/android" />
您可以使用以下代码检测长按
override fun onAccessibilityEvent(event: AccessibilityEvent?) {
if (event?.eventType == AccessibilityEvent.TYPE_VIEW_LONG_CLICK) {
// LongPress Detected here
}
}