如何当用户运行其他应用程序检测? (机器人) 如何当用户运行其他应用程序检测? (机器人)(H

2019-06-14 15:39发布

我试图建立在我的应用程序在后台运行,当用户运行其他应用程序,这样我可以控制其流量检测的应用程序。 为了说明我的查询,我想说明的例子。 我的应用程序在后台运行(比如作为服务),用户刚刚点击应用程序“XYZ”。 是否有可能为我的应用程序,以检测该应用程序“XYZ”已经启动? 不仅仅是检测是否“XYZ的活动已经到了前台,我想检测whther‘XYZ’已经启动或没有。 说有人推出“WhatsApp的使者”,我想知道,如果我的应用程序可以知道“的WhatsApp Messenger的”已经启动。

编辑:很多人认为我试图建立的恶意软件,但我不是。 我试图建立一个中学项目的应用程序。 我希望有一个统计,看看我经常用我的相机作为一个迷幻项目的一部分。 :/

在此先感谢,萨米特。

Answer 1:

是的,你可以找到该应用程序启动,通过跟踪logcat的 。 只需跟踪与信息-I日志ActivityManager标签。

亚行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


Answer 2:

我想你应该看看在谷歌播放“应用程序保护”的应用程序。 他们检测到用户启动其他应用程序。 这是通过读取系统日志进行。 尝试打开logcat的阅读和记录您发动了对设备的应用程序后。 你会感到惊讶。

而应该在哪里,你从那里走? 我想你应该尝试aLogCat应用。 这是freen和开源。 这将帮助你实际读取日志。

所有这一切都被认为是在Android的安全漏洞被一些开发商,虽然。



Answer 3:

我做了,如果其他应用程序启动它可以检测的服务。 我已为拨号器。 类似地,可以通过任何包名称来代替。

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show();

    final String str = "";
    Timer timer  =  new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        int phonelaunched = 0,phoneclosed =0;
        int phonelaunches = 1;
        @Override
        public void run() {
            ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();

            for ( ActivityManager.RunningAppProcessInfo appProcess: runningAppProcessInfo ) {
                Log.d(appProcess.processName.toString(),"is running");
                if (appProcess.processName.equals("com.android.dialer")) {
                    if ( appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND  /*isForeground(getApplicationContext(),runningAppProcessInfo.get(i).processName)*/){
                        if (phonelaunched == 0 ){
                            phonelaunched = 1;
                            Log.d(str,"dude phone has been launched");
                        }
                        else if (phoneclosed == 1){
                            phonelaunches++;
                            phoneclosed = 0;
                            Log.d(String.valueOf(phonelaunches),"dude that was counter");
                        }
                    }
                    else {
                        phoneclosed = 1;
                        Log.d(str,"dude phone has been closed");

                    }
                }
            }
        }
    },2000,3000);

    return START_STICKY;
}

在这里,我经历的所有正在运行的任务并检查它是否是我们预期的应用。 如果让我检查,如果应用程序是前景和应用程序使用从未推出“phonelaunched”变量。 当预期应用是在背景和变量被相应地设置phoneclosed被使用。

所有这一切都在服务类中实现



Answer 4:

在我的书,你所提出的问题的方式,这听起来像HI-顶的应用中为您服务,控制一定的方式,近乎恶意软件的厄运。 每个应用程序是不同的朴实由于权限 - 但它不会在Android中运行。 从而,每个应用程序彼此隔离。 因此,要直截了当地回答你的问题,它的号

至于其他的回答表明 - 你可以再次监视logcat的但是..然后...为什么呢?



文章来源: How to detect when the user launches another app? (Android)