【问题标题】:How to get any identifier of the topmost activity?如何获取最顶层活动的任何标识符?
【发布时间】:2010-08-03 05:56:39
【问题描述】:

我有一个服务,当最顶层的 Activity 改变时,它的行为必须改变。假设活动 A 处于活动状态,然后服务开始某种处理。当 Activity A 不再可见时,该处理必须停止:用户按下“Back”、“Home”或执行任何其他使 Activity A 不可见的操作。此 Activity A 必须不知道该服务 - 即它不必明确通知该服务它正在消失。

简而言之,有没有办法:

  • 获取最顶层 Activity 的任何类型的标识(对象引用、类名、ID 等),
  • 当最上面的 Activity 发生变化时收到通知?

附:这听起来像是恶意软件的行为,但事实并非如此!这是合法的用例!

编辑:活动不在我的应用程序中。它们几乎可以是任何东西——浏览器、地图应用、设置等。

【问题讨论】:

    标签: android


    【解决方案1】:

    这个顶部已经过时了。答案见底部。

    我假设您指的是您自己的应用程序中的活动:

    所有活动在进入前台时调用onResume(),在离开前台时调用onPause()。只需使用您的功能覆盖此方法(请务必分别调用 super.onResume()super.onPause()!)。

    至于标识符,也许你可以让你的服务有一个静态方法,该方法被一个进入前台的 Activity 调用(在onResume()),提供对自身的引用、它的类、一些任意 ID 等。

    参考:http://developer.android.com/reference/android/app/Activity.html


    编辑:

    您可以通过ActivityManager -> running tasks -> ComponentName 访问 top Activity 的身份。请务必在清单中声明 <uses-permission android:name="android.permission.GET_TASKS" />

    Context context = someArbitraryContext;
    ActivityManager am = (ActivityManager) context.
        getSystemService(Activity.ACTIVITY_SERVICE);
    String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
    String className = am.getRunningTasks(1).get(0).topActivity.getClassName();
    

    至于收到通知,您可能需要每 x 毫秒检查一次顶部 Activity。

    【讨论】:

    • 不,我所指的活动几乎可以是任何东西,不一定在我自己的应用程序中。如果是我自己的 Activity,onResume() 和 onPause() 会很有用。
    • 它有效,谢谢!只需使用if(className.equals(your classname)){//do stuff}。还要确保输入完整的类名,例如com.example.appname.class
    • 想知道这是否会导致任何应用被拒绝?
    【解决方案2】:

    创建一个baseActivity 并从baseActivity 扩展所有其他活动,在 onResume 中将当前活动保存在全局类中的公共静态文件中(在我的情况下扩展应用程序)

    public class baseActivity extends Activity {
        @Override
        protected void onResume() {
            super.onResume();
            Global.Activity = this;
        }
    }
    

    其他活动

        public class mainActivity extends baseActivity {
            // You Can Use Global.Activity Everywhere ! , Even in a Object Extended Class
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多