我要求每当用户打开应用程序时,应该生成一个事件,我必须在我的应用程序中进行一些处理。我意识到android不会广播那个事件。因此,我陷入困境并寻找解决方法。
我也遇到过一些做类似事情的应用程序,例如:
Avast移动安全:打开应用程序扫描应用程序。
保险柜:在打开锁定的应用程序时显示密码键盘。
任何人都可以告诉我这些应用程序如何检测应用程序打开事件或指出我正确的方向。
我以前做过一些Windows API挂钩,不知道我是否也可以在android中使用这种技术。我遇到过一些运行时代码注入框架,如“Cydia Substrate”和“Xposed”。这些东西可以解决我的问题吗?
答案 0 :(得分:0)
在每个Activity的onStart()或onCreate()方法中处理它。我会把你的支票放在onStart()。
@Override
protected void onStart() {
super.onStart();
//..Do processing.
}
您可以在onStop或onPause方法中保存某些项目,以便在用户离开App后数据仍然存在。
如果它是片段,那么你必须在onAttach中进行:
@Override
public void onAttach(Activity activity) {
//..Do Processing.
super.onAttach(activity);
}
答案 1 :(得分:-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
中,您应该检查活动堆栈顶部的新应用程序。