首页 > 解决方案 > 检测其他应用程序何时启动

问题描述

我想要什么:我正在尝试创建一个应用程序保护程序。当有人打开其他应用程序时,我希望用户输入密码/PIN。

为此,我正在尝试按照此处的建议阅读日志:(https://stackoverflow.com/a/7239840/1640009

前台服务:

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

        if (intent!=null){
            if (intent.getAction()!=null && intent.getAction().equals(Constants.ACTION.STOP_ACTION)) {
                killPermissionService();
                return START_STICKY;
            }
        }


        if (timer != null) {
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {

                     try {

                         String logs= LogsUtil.readLogs().toString();

                         if (logs.contains("START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME]")){
                             Log.e(TAG,"app launched");
                          }

                     } catch (Exception ex) {
                        Log.e("here","line 166");
                        ex.printStackTrace();
                    }
                }
            }, 1000, 1000);
        }

        return START_STICKY;
    }

// 在 LogUtil 中,我有这个函数

public static StringBuilder readLogs() {
        StringBuilder logBuilder = new StringBuilder();
        try {
            Process process = Runtime.getRuntime().exec("logcat *:D -d");
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                logBuilder.append(line + "\n");
            }
        } catch (IOException e) {
            Log.e("error while","fetching log");
            e.printStackTrace();
        }
        return logBuilder;
    }

但如果条件从未满足。我还尝试直接在终端上执行“./adb logcat *:D”,在应用启动时输出中存在同一行。

标签: androidloggingprocessruntimestartup

解决方案


推荐阅读