我试图建立在我的应用程序在后台运行,当用户运行其他应用程序,这样我可以控制其流量检测的应用程序。 为了说明我的查询,我想说明的例子。 我的应用程序在后台运行(比如作为服务),用户刚刚点击应用程序“XYZ”。 是否有可能为我的应用程序,以检测该应用程序“XYZ”已经启动? 不仅仅是检测是否“XYZ的活动已经到了前台,我想检测whther‘XYZ’已经启动或没有。 说有人推出“WhatsApp的使者”,我想知道,如果我的应用程序可以知道“的WhatsApp Messenger的”已经启动。
编辑:很多人认为我试图建立的恶意软件,但我不是。 我试图建立一个中学项目的应用程序。 我希望有一个统计,看看我经常用我的相机作为一个迷幻项目的一部分。 :/
在此先感谢,萨米特。
是的,你可以找到该应用程序启动,通过跟踪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
我想你应该看看在谷歌播放“应用程序保护”的应用程序。 他们检测到用户启动其他应用程序。 这是通过读取系统日志进行。 尝试打开logcat的阅读和记录您发动了对设备的应用程序后。 你会感到惊讶。
而应该在哪里,你从那里走? 我想你应该尝试aLogCat应用。 这是freen和开源。 这将帮助你实际读取日志。
所有这一切都被认为是在Android的安全漏洞被一些开发商,虽然。
我做了,如果其他应用程序启动它可以检测的服务。 我已为拨号器。 类似地,可以通过任何包名称来代替。
@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被使用。
所有这一切都在服务类中实现
在我的书,你所提出的问题的方式,这听起来像HI-顶的应用中为您服务,控制一定的方式,近乎恶意软件的厄运。 每个应用程序是不同的朴实由于权限 - 但它不会在Android中运行。 从而,每个应用程序彼此隔离。 因此,要直截了当地回答你的问题,它的号
至于其他的回答表明 - 你可以再次监视logcat的但是..然后...为什么呢?