0

我有一个要求,每当用户打开应用程序时,都应该生成一个事件,我必须在我的应用程序中进行一些处理。我意识到android不广播那个事件。因此,我被困住并寻找解决方法。

我还遇到了一些做类似事情的应用程序,例如:

Avast Mobile Security:在应用程序打开时对其进行扫描。

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

谁能告诉我这些应用程序如何检测应用程序打开事件或为我指明正确的方向。

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

4

2 回答 2

0

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

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

您可以将某些项目保存在 onStop 或 onPause 方法中,以便在用户离开应用程序后数据仍然存在。

如果它是一个片段,那么你必须在 onAttach 中进行:

    @Override
    public void onAttach(Activity activity) {
//..Do Processing.
        super.onAttach(activity);    
    }
于 2014-03-27T18:52:40.967 回答
-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您应该检查活动堆栈顶部的新应用程序。

于 2014-07-24T05:43:46.180 回答