Как я могу программно запустить AccessibilityService? - PullRequest
2 голосов
/ 06 мая 2020

Я использую службу доступности , чтобы проверить, какое приложение я использую , например Я использую WhatsApp и пытаюсь получить его имя пакета и сравнить его с моей базой данных, если пакет существует в моей базе данных, я закрываю приложение, чтобы я не мог использовать это приложение, я просто работаю над своей идеей. Прошло несколько дней с тех пор, как у меня возникла эта проблема, и я не могу найти решения своих проблем, может кто-нибудь мне поможет. Спасибо.

Проблемы, с которыми я столкнулся, перечислены ниже:

  1. Служба специальных возможностей автоматически закрывается, когда я пытаюсь закрыть свое приложение. Если я не закрываю приложение, оно работает нормально. Например, Если я закрою основное приложение, служба отключится. Есть ли способ остановить это?
  2. Когда я нашел имя пакета в своей базе данных, я просто выводил пользователя на главный экран «Домашняя страница». Это не лучший способ сделать это, может кто-нибудь мне с этим поможет. Мне нужно правильно заблокировать это приложение.
  3. Есть ли способ закрыть приложение, которое я пытаюсь заблокировать из недавних приложений?

Мой код указан ниже:

Доступность класса обслуживания

 override fun onServiceConnected() {
        super.onServiceConnected() 
        val info = serviceInfo
        info.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED 
        info.flags = AccessibilityServiceInfo.DEFAULT
        info.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
        info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS
        info.flags = AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY
        info.flags = AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_ALL_MASK
        info.notificationTimeout = 100
        info.packageNames = null
        serviceInfo = info
 } 


 override fun onAccessibilityEvent(event: AccessibilityEvent) {

        if(AccessibilityEvent.eventTypeToString(event.eventType).contains("WINDOW")){
            val nodeInfo = event.source
            dfs(nodeInfo)
        }

        if (event.packageName != null) { 
            getAllBlockedApps(packageName = event.packageName.toString())
            return
        }
    }

Код блокировки приложения

val startMain = Intent(Intent.ACTION_MAIN) 
startMain.addCategory(Intent.CATEGORY_HOME)
startMain.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startMain.flags = Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
startActivity(startMain)

...