public override void OnCreate (Bundle savedInstanceState) { base.OnCreate (savedInstanceState); mUsageStatsManager = (UsageStatsManager)Activity .GetSystemService ("usagestats"); //Context.USAGE_STATS_SERVICE }
public override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); mUsageStatsManager = (UsageStatsManager)Activity .GetSystemService("usagestats"); //Context.USAGE_STATS_SERVICE }
public override void OnCreate() { _context = this; _isRunning = false; _task = new Task(DoWork); mUsageStatsManager = (UsageStatsManager)this .GetSystemService("usagestats"); //Context.USAGE_STATS_SERVICE }
// 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); }
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); }
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); } } } }
public AndroidApplicationUsageManager(Probe probe) { _probe = probe; Manager = (UsageStatsManager)Application.Context.GetSystemService(global::Android.Content.Context.UsageStatsService); }