从不同的导航状态android检测应用程序恢复状态

时间:2014-03-03 10:57:11

标签: android navigation-drawer

我想记录从不同的入口点恢复/创建的应用程序状态。

  • app从app drawer打开
  • 应用程序已从通知中打开
  • 应用程序是从打开的应用程序(长按家庭)打开的
  • app从其他屏幕恢复

我知道可以通过生成基本活动和覆盖简历/暂停事件来跟踪它,但我在应用程序中存在大量活动。那么有什么简短的方法可以获得申请状态吗?


我考虑过创建服务并不断检查当前正在运行的任务,但是只有在我的活动处于可见状态时才找到运行服务的方法时,我才能使用这种方法。 (对于我来说,绑定每个活动中的服务对我来说是不实际的)

1 个答案:

答案 0 :(得分:1)

您建议的解决方案听起来不错:

public class YourBaseActivity extends Activity {

    @Override
    protected void onResume() {
        super.onResume();

        ActivityManager mgr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> tasks = mgr.getRunningTasks(1);

        tasks.get(0).topActivity.getClassName();

        //Do what you need to do with it...
    }
}

让你的所有活动扩展这一活动而不是活动应该适合你


修改 另一种方法:

创建自己的应用程序类并实现Application.ActivityLifecycleCallbacks,这是代码的一个工作示例:

public class ApplicationTest extends Application implements   Application.ActivityLifecycleCallbacks {
    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
    }

    @Override
    public void onActivityPaused(Activity activity) {
    }

    @Override
    public void onActivityResumed(Activity activity) {
        Log.d("testing", "onActivityResumed");
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }

    @Override
    public void onActivityStarted(Activity activity) {
    }

    @Override
    public void onActivityStopped(Activity activity) {
    }
}

在你的清单中引用这个类:

<application
    ...
    android:name="com.example.testing.ApplicationTest" >