public override void OnCreate (Bundle savedInstanceState)
		{
			base.OnCreate (savedInstanceState);

			mUsageStatsManager = (UsageStatsManager)Activity
				.GetSystemService ("usagestats"); //Context.USAGE_STATS_SERVICE
		}
Esempio n. 2
0
        public override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            mUsageStatsManager = (UsageStatsManager)Activity
                                 .GetSystemService("usagestats"); //Context.USAGE_STATS_SERVICE
        }
Esempio n. 3
0
 public override void OnCreate()
 {
     _context           = this;
     _isRunning         = false;
     _task              = new Task(DoWork);
     mUsageStatsManager = (UsageStatsManager)this
                          .GetSystemService("usagestats"); //Context.USAGE_STATS_SERVICE
 }
Esempio n. 4
0
        //

        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            Intent _intent = new Intent(Settings.ActionUsageAccessSettings);

            StartActivity(_intent);

            // ViewがすでにあるならRemoveする
            if (_isOverlayViewPresenceCheck)
            {
                _windowManager.RemoveView(_overlayView);
                _isOverlayViewPresenceCheck = false;
            }

            //
            UsageStatsManager usageStatsManager1 = (UsageStatsManager)_context.GetSystemService(USAGE_STATS_SERVICE);

            currentYear1     = DateTime.Now.Year; // Calendar.GetInstance().Get(Calendar.Year);
            queryUsageStats1 = usageStatsManager1.QueryUsageStats(UsageStatsInterval.Yearly, currentYear1 - 1, currentYear1);
            queryUsageStats2 = usageStatsManager1.QueryEvents(currentYear1 - 1, currentYear1);
            //

            _windowManager = _context.GetSystemService(WindowService).JavaCast <IWindowManager>();
            var layoutInflater = LayoutInflater.From(_context);

            _overlayView = layoutInflater.Inflate(Resource.Layout.overlay_test_layout, null);

            // 画面サイズを取得
            var psize = new Android.Graphics.Point();

            _windowManager.DefaultDisplay.GetSize(psize);

            // オーバーレイ範囲指定 & オーバーレイ設定
            var param = new WindowManagerLayoutParams(
                (int)(psize.X * 0.9),
                (int)(psize.Y * 0.4),               // なんかいい感じに範囲を指定
                WindowManagerTypes.SystemAlert,
                WindowManagerFlags.Fullscreen,      // なんかいい感じに属性を追加
                Android.Graphics.Format.Translucent // 半透明とか
                )
            {
                Gravity = GravityFlags.Top
            };

            // OverlayViewのクリックイベントを登録
            var closeButton = _overlayView.FindViewById <Button>(Resource.Id.closeButton);

            closeButton.Click += CloseButton_Click;
            var testButton = _overlayView.FindViewById <Button>(Resource.Id.testButton);

            testButton.Click += (sender, args) => TestMethod();

            // Viewを画面上に重ね合わせする
            _windowManager.AddView(_overlayView, param);
            _isOverlayViewPresenceCheck = true;

            return(StartCommandResult.NotSticky);
        }
Esempio n. 5
0
        void HandleTimerCallback(object state)
        {
            UsageStatsManager mUsageStatsManager = (UsageStatsManager)GetSystemService(UsageStatsService);
            long   endTime        = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
            long   beginTime      = endTime - 1000 * 60 * 2;
            string topPackageName = "";

            IList <UsageStats> queryUsageStats = mUsageStatsManager.QueryUsageStats(UsageStatsInterval.Best, beginTime, endTime);

            if (queryUsageStats == null || queryUsageStats.Count == 0)
            {
                return;
            }
            queryUsageStats = queryUsageStats.OrderByDescending(u => u.LastTimeUsed).ToList();

            UsageStats usageStatsIns   = queryUsageStats[0];
            Field      mLastEventField = null;

            try
            {
                mLastEventField = usageStatsIns.Class.GetField("mLastEvent");
            }
            catch (Java.Lang.Exception e)
            {
                e.PrintStackTrace();
            }
            foreach (UsageStats usageStats in queryUsageStats)
            {
                if (mLastEventField != null)
                {
                    int lastEvent = 0;
                    try
                    {
                        lastEvent = mLastEventField.GetInt(usageStats);
                    }
                    catch (IllegalAccessException e)
                    {
                        e.PrintStackTrace();
                    }
                    if (lastEvent == 1)
                    {
                        topPackageName = usageStats.PackageName;
                        break;
                    }
                }
            }
            Console.WriteLine("当前应用的包名:" + topPackageName);
            if (!whiteList.ContainsKey(topPackageName))
            {
                Intent intent = new Intent("com.companyname.ttp.ListenAppService");
                intent.PutExtra("Message", 40);
                SendBroadcast(intent);
            }
        }
        public UsageStatsManager_Android()
        {
            Intent _intent = new Intent(Settings.ActionUsageAccessSettings);

            _context.StartActivity(_intent);

            beginCal = Calendar.GetInstance(TimeZone.Default);
            beginCal.Set(Calendar.Date, 1);
            beginCal.Set(Calendar.Month, 0);
            beginCal.Set(Calendar.Year, 2017);

            endCal = Calendar.GetInstance(TimeZone.Default);
            endCal.Set(Calendar.Date, 6);
            endCal.Set(Calendar.Month, 0);
            endCal.Set(Calendar.Year, 2017);

            usageStatsManager1 = (UsageStatsManager)_context.GetSystemService(USAGE_STATS_SERVICE);
            currentToday       = DateTime.Today;
            currentTimeBegin   = beginCal.TimeInMillis;
            currentTimeEnd     = endCal.TimeInMillis;
            queryUsageStats1   = usageStatsManager1.QueryUsageStats(UsageStatsInterval.Yearly, currentTimeBegin, currentTimeEnd);
            UsageEvent1        = usageStatsManager1.QueryEvents(currentTimeBegin, currentTimeEnd);
        }
Esempio n. 7
0
        public List <AppProcess> GetAppProcessesByTime(string time = "year")
        {
            try {
                #region AppStatistics
                PackageManager packageManager = context.PackageManager;
                AppOpsManager  appOps         = (AppOpsManager)context.GetSystemService(Context.AppOpsService);

                var mode = appOps.CheckOpNoThrow(AppOpsManager.OpstrGetUsageStats, Android.OS.Process.MyUid(), context.PackageName);

                if (mode == AppOpsManager.ModeAllowed)
                {
                    UsageStatsManager mUsageStatsManager = (UsageStatsManager)context.GetSystemService(Context.UsageStatsService);

                    NetworkStatsManager networkStatsManager = (NetworkStatsManager)context.GetSystemService(Context.NetworkStatsService);

                    Calendar calendar  = Calendar.Instance;
                    long     endMillis = calendar.TimeInMillis;
                    long     startMillis;
                    if (time == "day")
                    {
                        calendar.Add(Calendar.DayOfWeekInMonth, -1);
                    }
                    else if (time == "month")
                    {
                        calendar.Add(Calendar.Month, -1);
                    }
                    else if (time == "week")
                    {
                        calendar.Add(Calendar.WeekOfMonth, -1);
                    }
                    else
                    {
                        calendar.Add(Calendar.Year, -1);
                    }
                    startMillis = calendar.TimeInMillis;

                    IDictionary <String, UsageStats> lUsageStatsMap = mUsageStatsManager.QueryAndAggregateUsageStats(startMillis, endMillis);

                    foreach (var usageStats in lUsageStatsMap)
                    {
                        long     totalTimeInMillis  = 0;
                        long     totalTimeInSeconds = 0;
                        string   packageName        = "";
                        string   appName            = "";
                        long     receivedWifi       = 0;
                        long     sentWifi           = 0;
                        long     receivedMobile     = 0;
                        long     sentMobile         = 0;
                        DateTime lastUsage          = new DateTime();

                        packageName        = usageStats.Key;
                        totalTimeInMillis  = usageStats.Value.TotalTimeInForeground;
                        totalTimeInSeconds = totalTimeInMillis / 1000 / 60;
                        appName            = AppNameByPackageName(packageName);

                        ApplicationInfo info = packageManager.GetApplicationInfo(packageName, 0);
                        if (info != null)
                        {
                            int          uid = info.Uid;
                            NetworkStats networkStatsWifi = networkStatsManager.QueryDetailsForUid(ConnectivityType.Wifi, null, startMillis, endMillis, uid);

                            NetworkStats.Bucket bucketWifi = new NetworkStats.Bucket();
                            while (networkStatsWifi.HasNextBucket)
                            {
                                networkStatsWifi.GetNextBucket(bucketWifi);
                                receivedWifi += bucketWifi.RxBytes;
                                sentWifi     += bucketWifi.TxBytes;
                            }
                            NetworkStats        networkStatsMobile = networkStatsManager.QueryDetailsForUid(ConnectivityType.Mobile, null, startMillis, endMillis, uid);
                            NetworkStats.Bucket bucketMobile       = new NetworkStats.Bucket();
                            while (networkStatsMobile.HasNextBucket)
                            {
                                networkStatsMobile.GetNextBucket(bucketMobile);
                                receivedMobile += bucketMobile.RxBytes;
                                sentMobile     += bucketMobile.TxBytes;
                            }
                        }

                        appProcesses.Add(new AppProcess {
                            PackageName = packageName, TimeOfAppUsageInSeconds = totalTimeInSeconds, AppName = appName, NetworkUsageTotal = receivedWifi + sentWifi + receivedMobile + sentMobile, NetworkUsageSend = sentWifi + sentMobile, NetworkUsageReceived = receivedWifi + receivedMobile
                        });
                    }
                }
                else
                {
                    // When needed permission
                    var activity = (MainActivity)Forms.Context;
                    activity.StartActivityForResult(new Intent(Settings.ActionUsageAccessSettings), MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
                }
            } catch (Exception ex) {
                throw new Exception(ex.Message);
            }
            #endregion
            return(appProcesses);
        }
        private void CheckSpentTimes()
        {
            mUsageStatsManager = (UsageStatsManager)GetSystemService("usagestats");

            var currentDate = System.DateTime.Now;
            var beginDate   = System.DateTime.Now;

            var intervalType = UsageStatsInterval.Daily;

            switch (intervalType)
            {
            case UsageStatsInterval.Yearly:
                beginDate = new DateTime(beginDate.Year, 1, 1);
                break;

            case UsageStatsInterval.Monthly:
                beginDate = new DateTime(beginDate.Year, beginDate.Month, 1);
                break;

            case UsageStatsInterval.Weekly:
                beginDate = beginDate.StartOfWeek(DayOfWeek.Monday);
                break;

            case UsageStatsInterval.Daily:
                beginDate = beginDate.Date;
                break;

            default:
                break;
            }

            var beginTime   = (long)(beginDate - new DateTime(1970, 1, 1)).TotalMilliseconds;
            var currentTime = (long)(currentDate - new DateTime(1970, 1, 1)).TotalMilliseconds;

            var queryUsageStats = mUsageStatsManager
                                  .QueryAndAggregateUsageStats(beginTime,
                                                               currentTime);

            if (queryUsageStats.Count == 0)
            {
                Log.Info("SS", "The user may not allow the access to apps usage. ");
                Toast.MakeText(this,
                               GetString(Resource.String.explanation_access_to_appusage_is_not_enabled),
                               ToastLength.Long).Show();
            }

            var result = queryUsageStats.Values.ToList();

            var allAppsToCheck       = databaseService.SelectTableAppSettings();
            var packageNamesToCheck1 = allAppsToCheck.Select(x => x.PackageName);

            result.RemoveAll(x => !(packageNamesToCheck1.Contains(x.PackageName)));

            foreach (var usageStat in result)
            {
                var currentDbEntry = allAppsToCheck.FirstOrDefault(x => x.PackageName == usageStat.PackageName);

                if (currentDbEntry != null && usageStat.TotalTimeInForeground > currentDbEntry.DailyLimit)
                {
                    if (currentDbEntry.LastTotalTimeInForeground != usageStat.TotalTimeInForeground)
                    {
                        TimeSpan timeSpanExceeded = TimeSpan.FromMilliseconds((double)(usageStat.TotalTimeInForeground - currentDbEntry?.DailyLimit));

                        currentDbEntry.LastTotalTimeInForeground = usageStat.TotalTimeInForeground;

                        var timeMessage = string.Empty;

                        if (timeSpanExceeded.Hours > 0)
                        {
                            timeMessage = $"{timeSpanExceeded.Hours} hours {timeSpanExceeded.Minutes} minutes.";
                        }
                        else
                        {
                            timeMessage = $"{timeSpanExceeded.Minutes} minutes.";
                        }

                        if (currentDbEntry.AppName == null)
                        {
                            currentDbEntry.AppName = Android.App.Application.Context.PackageManager.GetApplicationLabel(PackageManager.GetApplicationInfo(currentDbEntry.PackageName, PackageInfoFlags.MetaData));
                        }


                        Notification.Builder builder = new Notification.Builder(this)
                                                       .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
                                                       .SetContentTitle($"Shut down {currentDbEntry.AppName}")
                                                       .SetContentText($"Daily limit was exceeded by {timeMessage}")
                                                       .SetSmallIcon(Resource.Drawable.icon);

                        // Build the notification:
                        Notification notification = builder.Build();

                        // Get the notification manager:
                        NotificationManager notificationManager =
                            GetSystemService(Context.NotificationService) as NotificationManager;

                        // Publish the notification:
                        const int notificationId = 0;
                        notificationManager.Notify(notificationId, notification);

                        databaseService.UpdateTableAppSettings(currentDbEntry);
                    }
                }
            }
        }
Esempio n. 9
0
 public AndroidApplicationUsageManager(Probe probe)
 {
     _probe  = probe;
     Manager = (UsageStatsManager)Application.Context.GetSystemService(global::Android.Content.Context.UsageStatsService);
 }