コード例 #1
0
        /// <summary>
        ///     Gets the current activity.
        ///     The inspiration for this code came from here:
        ///     http://stackoverflow.com/questions/11411395/how-to-get-current-foreground-activity-context-in-android
        /// </summary>
        private static Activity GetActivity()
        {
            Class  activityThreadClass = Class.ForName("android.app.ActivityThread");
            Object activityThread      = activityThreadClass.GetMethod("currentActivityThread").Invoke(null);
            var    activitiesField     = activityThreadClass.GetDeclaredField("mActivities");

            activitiesField.Accessible = true;
            ArrayMap activities = (ArrayMap)activitiesField.Get(activityThread);

            foreach (Object activityRecord in activities.Values())
            {
                try
                {
                    Class activityRecordClass = activityRecord.Class;
                    Field pausedField         = activityRecordClass.GetDeclaredField("paused");
                    pausedField.Accessible = true;
                    if (!pausedField.GetBoolean(activityRecord))
                    {
                        Field activityField = activityRecordClass.GetDeclaredField("activity");
                        activityField.Accessible = true;
                        Activity activity = (Activity)activityField.Get(activityRecord);
                        return(activity);
                    }
                }
                catch (Exception)
                {
                }
            }

            return(null);
        }