Android:检测活动/应用程序更改事件

Bla*_*ack 6 android broadcastreceiver android-activity

我有一个Android服务.我想在用户更改应用程序时执行某项任务.是否有广播或活动,我可以听.

如果轮询是唯一的解决方案,任何人都可以建议一些良好的轮询技术.

谢谢.

Bor*_*lov 1

您可以通过轮询最活跃的活动来区分应用程序:

private String lastPackageName;

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
// get the info from the currently running task
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1); 

     Log.d("topActivity", "CURRENT Activity ::"
             + taskInfo.get(0).topActivity.getClassName());

ComponentName componentInfo = taskInfo.get(0).topActivity;
String packageName = componentInfo.getPackageName();

if(lastPackageName != packageName){
    //Probably application changed
}

lastPackageName = packageName;
Run Code Online (Sandbox Code Playgroud)

但这将取决于您多久轮询一次该信息。您可以尝试在每次用户按后退、主页按钮或按屏幕时轮询该信息。但这显然会太多且糟糕的轮询技术。

似乎这个问题之前已经被问过,但没有得到足够的答案: 当前台(顶部)活动(应用程序)更改时如何得到通知

来源:https ://stackoverflow.com/a/4753333/1276374

  • “每次用户按下后退键、主页按钮或按下屏幕时,您都可以尝试轮询此信息”——服务无法检测到任何这些事情。 (5认同)