2014-03-27 37 views
0

我有一个要求,无论何时应用程序被用户打开,应该生成一个事件,我必须在我的应用程序中做一些处理。我意识到android不会播放该事件。因此,我陷入困境并寻找工作。如何检测应用程序开放事件

我也接触过一些应用程序,做类似的事情,比如:

Avast的移动安全:扫描,当它打开的应用程序。

保险柜:当锁定的应用程序打开时显示密码键盘。

任何人都可以告诉我这些应用程序如何检测应用程序的开放事件或指向我在正确的方向做。

我以前做过一些Windows API挂钩,不知道我是否也可以在android中使用这种技术。我碰到过一些运行时代码注入框架,比如“Cydia Substrate”和“Xposed”。这些东西能解决我的问题吗?

回答

-1

我已经通过采取一种变通方法解决了这个问题。这不是确切的解决方案,但我的问题已得到解决。我所做的是我已经使用AlarmManager来启动重复服务(比如说10秒后),每次检查活动堆栈的新应用程序顶端。如果应用程序与上次应用程序不同(已保存),则这是已打开的新应用程序。这种方法的主要缺点是耗尽电池,但您可以选择一个合适的时间段,并且不要唤醒设备。

该服务启动代码下面给出:

//Start a Service that is started every 5 seconds 
AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Calendar cal = Calendar.getInstance(); 
Intent intent = new Intent(MyActivity.this, MyService.class); 
PendingIntent pintent = PendingIntent.getService(context, 0, intoo, 0); 
alarm.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), 5*1000, pintent); 

MyService.java你应该检查在活动堆栈的顶部新的应用程序。

0

它在每个Activity的onStart()或onCreate()方法中处理。我会把你的支票放在onStart()中。

@Override 
    protected void onStart() { 
     super.onStart(); 
//..Do processing. 
} 

,这样的数据仍然存在,用户离开该应用程序后,可以保存里面的onStop或在onPause方法的某些项目。

如果它是一个片段,然后u必须做到在onAttach:

@Override 
    public void onAttach(Activity activity) { 
//..Do Processing. 
     super.onAttach(activity);  
    } 
+0

你在说我自己的应用程序。实际上,我需要检测何时由用户打开任何应用程序而不是我自己的应用程序。 – Faheem

+0

Hrm ...也许尝试BroadCast Receiver http://developer.android.com/intl/zh-tw/reference/android/content/BroadcastReceiver.html – Gene

+0

Android不会广播应用程序开放事件。所以它不能通过广播接收机完成。我需要一些其他解决方案 – Faheem