0

我需要知道是否有任何接收器来检测用户通过我自己的应用程序单击或启动/启动了哪个应用程序

4

2 回答 2

1

我认为您可以使用logcat 和分析它的输出。

在所有类似的程序中,我发现了这个权限:

android.permission.READ_LOGS

这意味着他们都使用它。但似乎程序启动了,之后我们的程序(应用程序保护器)将启动并带到前面。

使用下面的代码:

try
    {
        Process mLogcatProc = null;
        BufferedReader reader = null;
        mLogcatProc = Runtime.getRuntime().exec(new String[]{"logcat", "-d"});

        reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));

        String line;
        final StringBuilder log = new StringBuilder();
        String separator = System.getProperty("line.separator"); 

        while ((line = reader.readLine()) != null)
        {
            log.append(line);
            log.append(separator);
        }
        String w = log.toString();
        Toast.makeText(getApplicationContext(),w, Toast.LENGTH_LONG).show();
    }
    catch (Exception e) 
    {
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
    }

并且不要忘记它对 android manifest 的许可。

更新: 通过 Tracking the Logcat找到启动了哪个应用程序。只需使用info -I log跟踪ActivityManager 标签。

从 adb shell 命令是,

adb logcat ActivityManager:I *:S

从您的应用程序代码中,

logcat ActivityManager:I *:S

在 Logcat 中,您可以找到类似的行,

I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}

何时启动任何应用程序。

logcat 输出显示该消息与优先级“I”和标记“ActivityManager”有关:

只需在应用程序的清单文件中添加权限,

android.permission.READ_LOGS

于 2013-02-05T07:33:07.113 回答
0

自 android 4.1 起已弃用,应用程序只能使用 android.permission.READ_LOGS 访问其自己的日志

于 2015-01-25T19:04:41.297 回答