代码之家  ›  专栏  ›  技术社区  ›  Ignas Limanauskas

如何获取最顶层活动的任何标识符?

  •  11
  • Ignas Limanauskas  · 技术社区  · 15 年前

    我有一个服务,当最上面的活动发生变化时,它的行为必须改变。比如说,活动A是活动的,然后服务开始某种处理。当活动A不再可见时,此处理必须停止:用户按下“上一步”、“主页”或执行其他使活动不可见的操作。此活动A不能意识到服务,也就是说,它不必显式地通知服务它将要离开。

    简而言之,有没有办法:

    • 获取最顶层活动的任何类型的标识(对象引用、类名、ID等),
    • 最上面的活动更改时接收通知?

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

    2 回复  |  直到 15 年前
        1
  •  22
  •   Andy Zhang    15 年前

    上面的部分已经过时了。答案见下图。

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

    所有活动呼叫 onResume() 当来到前台 onPause() super.onResume() super.onPause() 分别是!)。

    ),提供对自身、类、任意ID等的引用。

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


    您可以通过 ActivityManager -&燃气轮机;正在运行任务-> ComponentName . 一定要申报 <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毫秒检查一次top活动。

        2
  •  1
  •   Mojtaba Yeganeh    10 年前

    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
        }