标签: usage-statistics

我在哪里可以找到ios版本的统计数据?

我将开始一个重大项目,我必须选择我需要定位的iOS SDK版本.为此,我最近有关于在iPhone上使用ios 5和6的统计数据.

哪里可以找到这些统计数据?

iphone usage-statistics ios5 ios6

112
推荐指数
1
解决办法
6万
查看次数

如何使用UsageStatsManager?

背景

谷歌已弃用getRecentTasks"ActivityManager"类的功能" ".现在它所做的只是获取当前应用程序已打开的应用程序列表.

我甚至在StackOverflow上写了一篇关于它的帖子,但我发现这是不可能的.

问题

我发了一篇关于它的帖子(在这里,另一个,类似的由其他人创建,在这里),并要求重新考虑它,谷歌决定创建一个新类,似乎提供类似的功能(更像是统计,但也可能有用),但我无法找到如何使用它.

该类称为" UsageStatsManager",我的猜测是函数" queryUsageStats"完成工作.

此外,它似乎有一个新的权限(" android.permission.PACKAGE_USAGE_STATS"),这是一个系统权限,但它写道:

声明权限意味着使用API​​的意图,设备用户可以通过Settings应用程序授予权限.

这是关于这个新功能另一个链接.

我发现了什么

我查看了Android的代码,并注意到"Context"有USAGE_STATS_SERVICE,在JavaDocs中说下一件事:

/**
 * Use with {@link #getSystemService} to retrieve a {@link
 * android.app.UsageStatsManager} for interacting with the status bar.
 *
 * @see #getSystemService
 * @see android.app.UsageStatsManager
 * @hide
 */
public static final String USAGE_STATS_SERVICE = "usagestats";
Run Code Online (Sandbox Code Playgroud)

奇怪的是,不仅它说" status bar",而且packageName也不匹配(应该是" android.app.usage.UsageStatsManager").

我还添加了正确的权限:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />
Run Code Online (Sandbox Code Playgroud)

这是我使用的代码:

  final UsageStatsManager …
Run Code Online (Sandbox Code Playgroud)

android usage-statistics activity-manager android-recents usagestatsmanager

52
推荐指数
5
解决办法
5万
查看次数

如何在Android上基于每个应用程序查找数据使用情况?

我试图在每个应用程序的基础上找出Android上的数据使用情况.像Android数据使用应用程序和配额/上限监视器小部件:永远不会收取额外的数据或再次上限!.

我查看了Stack Overflow问题如何在Android环境中检测数据使用情况.

但它并没有多大帮助.


ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo( mInfo );
List<RunningAppProcessInfo> listOfRunningProcess = activityManager.getRunningAppProcesses();
Log.d(TAG, "XXSize: " + listOfRunningProcess.size());

for (RunningAppProcessInfo runningAppProcessInfo : listOfRunningProcess) {

    if (runningAppProcessInfo.uid > 1026)
    {
        Log.d(TAG, "ANS " + runningAppProcessInfo.processName +
                   " Id :" + runningAppProcessInfo.pid +
                   " UID: " + runningAppProcessInfo.uid);
    }
}
Run Code Online (Sandbox Code Playgroud)

我按照Akos Cz的建议尝试了上面的代码.但是,与上面提到的不同,所有UID都是数字app_79.这样可以吗?

android usage-statistics

41
推荐指数
2
解决办法
7万
查看次数

如何检查是否给出了"android.permission.PACKAGE_USAGE_STATS"权限?

背景

我正在尝试获取应用程序启动的统计信息,并且在Lollipop上可以通过使用UsageStatsManager类来实现(原始帖子在这里):

表现:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions"/>
Run Code Online (Sandbox Code Playgroud)

打开活动,让用户确认给您这个权限:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

获取统计数据,汇总:

 private static final String USAGE_STATS_SERVICE ="usagestats"; // Context.USAGE_STATS_SERVICE);
 ...
 final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService(USAGE_STATS_SERVICE);
 final Map<String,UsageStats> queryUsageStats=usageStatsManager.queryAndAggregateUsageStats(fromTime,toTime);
Run Code Online (Sandbox Code Playgroud)

问题

我似乎无法检查是否授予您所需的权限("android.permission.PACKAGE_USAGE_STATS").到目前为止我所做的一切总是会让人感到被拒绝.

代码有效,但权限检查不起作用.

我试过的

您可以使用以下任一方法检查是否授予了权限:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;   
Run Code Online (Sandbox Code Playgroud)

或这个:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;   
Run Code Online (Sandbox Code Playgroud)

两者总是返回它被拒绝(即使我已经授予用户权限).

看看UsageStatsManager的代码,我试图想出这个解决方法:

      UsageStatsManager usm=(UsageStatsManager)getSystemService("usagestats");
      Calendar calendar=Calendar.getInstance();
      long toTime=calendar.getTimeInMillis();
      calendar.add(Calendar.YEAR,-1);
      long fromTime=calendar.getTimeInMillis();
      final List<UsageStats> queryUsageStats=usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,fromTime,toTime);
      boolean granted=queryUsageStats!=null&&queryUsageStats!=Collections.EMPTY_LIST;
Run Code Online (Sandbox Code Playgroud)

它工作,但它仍然是一个解决方法.

这个问题

为什么我没有得到权限检查的正确结果?

应该怎么做才能更好地检查?

permissions android usage-statistics android-recents usagestatsmanager

40
推荐指数
2
解决办法
2万
查看次数

如何创建一个持续监控应用程序使用信息的服务?

手头的问题:我必须创建一个Service连续运行的.这项服务监控5个应用程序说你的手机上安装了5个安卓游戏.此服务需要获取以下信息:1.游戏开启和运行的次数是多少?2.每场比赛的运行​​时间.

例如:说如果我在我的应用程序中安装了此服务.我让它运行了一个月.我需要在应用程序的屏幕上显示此类信息:

游戏 游戏运行次数游戏 持续时间

第1场比赛共20次,共15小时

游戏2共16次,总共玩25小时

..

..

第5场比赛共10次,共12小时

可能的方法:当应用程序加载时,它会进入内存.注意到系统在应用程序启动时计时.当应用程序结束或放在后台注意时间再次.

所以说如果一个应用程序在晚上9点被带到内存并且在晚上9:30退出到后台,这给了我们30分钟的游戏时间.下次播放应用程序时,持续时间将从存储在某种变量中的上一个播放添加到30,依此类推.每次将应用程序带入内存时,正在播放的计数器应该增加1.因此,给我们一个应用程序播放的次数.

编码:Service在Android中根本不知道,因为我从来没有真正研究它们.任何与我手头的问题相关的教程都会非常有用.其次,如果还有另一种方法可以做到这一点.我也想知道.我真的可以使用一些代码片段来启动这个项目.

service android usage-statistics

35
推荐指数
2
解决办法
3万
查看次数

适用于Android 5 Samsung设备的Android使用权限

您可能知道,自Android 5启动以来,访问设备的最近任务(使用情况统计信息)需要用户手动启用此功能(设置 - >安全 - >使用权限).

我的应用程序检查设备是否使用Android 5,如果是,则为用户提供打开设置屏幕以启用使用权限的可能性:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                    startActivityForResult(intent, 12345);
Run Code Online (Sandbox Code Playgroud)

当我尝试在运行Android 5的三星设备中执行此操作时出现问题...当执行上面显示的行时出现此错误:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.USAGE_ACCESS_SETTINGS }
            at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1801)
            at android.app.Instrumentation.execStartActivity(Instrumentation.java:1499)
            at android.app.Activity.startActivityForResult(Activity.java:3913)
Run Code Online (Sandbox Code Playgroud)

似乎尚未实现Settings.ACTION_USAGE_ACCESS_SETTINGS操作,这很奇怪,因为如果您转到"设置"选项以启用应用程序以访问此使用情况统计信息是...

知道如何解决这个特定情况下的这个问题?

android usage-statistics samsung-mobile android-5.0-lollipop

26
推荐指数
1
解决办法
5073
查看次数

检查我的应用程序是否启用了使用权限

我正在使用新的UsageStatsManagerAPI来获取 Android 5.0 Lollipop中的当前前台应用程序.要使用此API,用户必须在Settings->Security->Apps with usage access屏幕中启用该应用程序.

我使用此Intent将用户直接发送到此屏幕:


startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

现在,我想验证用户启用我的应用程序.我想这样做,就像我验证用户启用我的应用程序使用NotificationListenerService但我不知道什么是String键,如果它甚至存在.


Settings.Secure.getString(contentResolver, "enabled_notification_listeners");
// Tried Settings.ACTION_USAGE_ACCESS_SETTINGS as key but it returns null

第二种方法是查询使用情况统计信息并检查它是否返回结果(当应用程序未启用时返回一个空数组)并且它大部分时间都有效,但有时即使我的应用程序启用也会返回0结果.


UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
long time = System.currentTimeMillis();
List stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);

if (stats == null || stats.isEmpty()) {
    // Usage access is not enabled
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查我的应用程序是否启用了使用权限?

android usage-statistics

25
推荐指数
4
解决办法
1万
查看次数

如何在Android中跟踪应用程序使用情况?如何检测活动何时启动?

我需要跟踪Android中的应用程序使用情况,例如AppUsage的工作方式(即跟踪应用程序启动的数量,以及使用每个应用程序所花费的时间).我打算做的是记录应用程序启动时的开始时间,然后获取应用程序暂停或停止时的结束时间.在LogCat中,我能够看到Activity的起始日志.我查看了可用的系统广播,我不确定在活动开始时是否有任何广播..基本上,我如何检测活动何时启动?

编辑:此外,Android还有一个内部使用的使用情况统计系统,可以在备件应用程序或*#*#4636#*#*拨打时找到(测试 - >使用情况统计)

android usage-statistics

22
推荐指数
2
解决办法
5万
查看次数

尝试检索前台应用时,Android 6.0 Marshmallow UsageStatsManager问题

每当我尝试查询UsageStatsManager的Usage Stats时,我都可以正确地获取最后一个正在运行的应用程序.但是,如果我下拉状态栏并且有新通知,则最后使用的应用程序(基于UsageStats)将更改为通知的应用程序.结果,我收到前台应用程序已更改的错误警报.

我似乎无法找到过滤那些特定抽奖的方法.有任何想法吗?

现在,我使用以下代码查询前台应用程序.问题仅存在于Marshmallow中(5.X正常工作).

UsageStatsManager mUsageStatsManager = (UsageStatsManager) rotationManager.getSystemService("usagestats");
long time = System.currentTimeMillis();
// We get usage stats for the last 10 seconds
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 2, time);
// Sort the stats by the last time used
if (stats != null) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
    mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
    foregroundApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
} 
}
Run Code Online (Sandbox Code Playgroud)

android usage-statistics usagestatsmanager

20
推荐指数
1
解决办法
4083
查看次数

用于.NET的UI使用统计信息收集库

您能否建议我可以使用一个库来检测我的.NET桌面应用程序,以收集用户的UI使用信息 - 移动鼠标的方式和时间,导航菜单,单击按钮,使用组合和列表框等.

因此,在每个用户会话或一段时间之后,我可以获得有关我的应用程序的所有用户操作的快照信息.

如果该库将附带分析模块,该模块可以帮助分析使用数据,则构建热图并提供有关如何更改UI以使其更好的一些建议.那就是 - "UI剖析器".或者至少如果它提供"使用数据播放器",那么我可以使用本地PC上的应用程序或以某种原理图方式重新播放用户会话.

库本身应该是非侵入式的,允许"注入"UI统计信息收集代码而不需要更改现有应用程序(.NET).

如果你可以推荐一个免费的/开源库来做这件事 - 它会很棒,但如果我做了我需要的东西,我不介意买一个商业版.

.net wpf user-interface usage-statistics winforms

19
推荐指数
1
解决办法
2060
查看次数