- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Android TV 应用(系统应用),我正在尝试使用 UsageStatsManager 获取最近使用的应用列表。
通过以下方法,
UsageStatsManager usm = getUsageStatsManager(context);
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.YEAR, -1)
final List<UsageStats> usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, startTime, endTime);
上述方法提供正确的使用数据,但在设备重启后,它不会提供以前使用过的应用程序使用数据,直到该应用程序在重启后再次打开。
但相同的代码在 android Phone 中工作正常(重启后)。
我也试过这个sample App来自 Android TV 中的 Github,它在 Android TV 中重启后也未能提供详细信息(但适用于 Mobile,两个操作系统版本 8)。
为什么无法获取 Android TV 的应用程序使用数据?
TIA
最佳答案
@Nainal 这里有一个解决方法。
正如我们所经历的那样,在设备重启后,Android 电视盒不会返回已安装应用程序的使用情况统计信息。这是我遵循的解决方法。
我们简化 map 对象并将其存储为共享首选项中的字符串。
首先重新启动后,我们会在使用情况统计中发现安装的包是否有时间戳。如果不是,我们将从存储的 MAP 中获取时间。
代码如下:
private void SortByRecentlyUsed(final List<ResolveInfo> info, final Context context){
/*load LastTimeUsedMap from pref*/
lastTimeUsedMap = loadLastTimeUsedMap(context);
UsageStatsManager usm = getUsageStatsManager(context);
Calendar calendar = Calendar.getInstance();
long endTime = calendar.getTimeInMillis();
calendar.add(Calendar.MONTH, -1);
long startTime = calendar.getTimeInMillis();
final List<UsageStats> usageStatsList = usm.queryUsageStats(UsageStatsManager.INTERVAL_BEST, startTime, endTime);
/*Update AppRecentTimeUsedMap with latest data from UsageStatsManager*/
updateAppRecentTimeUsedMap(usageStatsList,info);
class RecentUseComparator implements Comparator<ResolveInfo> {
@Override
public int compare(ResolveInfo lhs, ResolveInfo rhs) {
String lhsPackageName=lhs.activityInfo.applicationInfo.packageName;
String rhsPackageName=rhs.activityInfo.applicationInfo.packageName;
long lhsUsedTime = getLastUsedTime(lhsPackageName);
long rhsUsedTime = getLastUsedTime(rhsPackageName);
return (lhsUsedTime > rhsUsedTime) ? -1 : (lhsUsedTime == rhsUsedTime) ? 0 : 1;
}
private long getLastUsedTime(String packageDetails) {
long appRecentUsedtime = -1;
if (appRecentTimeUsedMap.containsKey(packageDetails)) {
appRecentUsedtime = appRecentTimeUsedMap.get(packageDetails);
}
return appRecentUsedtime;
}
}
RecentUseComparator mRecentComp = new RecentUseComparator();
Collections.sort(info, mRecentComp);
/*Save the updated LastTimeUsedMap in pref*/
saveLastTimeUsedMap(lastTimeUsedMap, context);
}
private void updateAppRecentTimeUsedMap(List<UsageStats> usageStatsList,List<ResolveInfo> info){
String packageName=null;
if (usageStatsList != null) {
for (ResolveInfo Rinfo : info) {
packageName = Rinfo.activityInfo.applicationInfo.packageName;
boolean added = false;
for (UsageStats usageStats : usageStatsList) {
if (packageName.equalsIgnoreCase(usageStats.getPackageName())) {
appRecentTimeUsedMap.put(usageStats.getPackageName(), usageStats.getLastTimeUsed());
updateLastTimeUsedMap(usageStats.getPackageName(), usageStats.getLastTimeUsed());
added=true;
}
}
if (!added && lastTimeUsedMap.containsKey(packageName)) {
appRecentTimeUsedMap.put(packageName, lastTimeUsedMap.get(packageName));
}
}
}
}
private void updateLastTimeUsedMap(String packageName,Long timeStamp){
lastTimeUsedMap.put(packageName, timeStamp);
}
/**
* Return Map containing Package name and recent used time from preference
*
* @param context
* @return Map<String,Long>
*/
private Map<String,Long> loadLastTimeUsedMap(Context context){
Map<String,Long> outputMap = new HashMap<String,Long>();
SharedPreferences pSharedPref = context.getSharedPreferences(LAST_TIME_USED_PREFS, Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString(LAST_TIME_USED_MAP, (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Long value = jsonObject.getLong(key);
outputMap.put(key, value);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
/**
* Save the updated map containing Package name and recent used time in preference
*
* @param inputMap
* @param context
*/
private void saveLastTimeUsedMap(Map<String,Long> inputMap, Context context){
final SharedPreferences sharedPreferences = context.getSharedPreferences(LAST_TIME_USED_PREFS,Context.MODE_PRIVATE);
if (sharedPreferences != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
final SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(LAST_TIME_USED_MAP).commit();
editor.putString(LAST_TIME_USED_MAP, jsonString);
editor.commit();
}
}
关于AndroidTV : UsageStatsManager not returning details for apps results after Reboot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992982/
有的时候我们手机刚开机时,手机屏幕上出现黑色背景,第一行有文字提示reboot system now。很多人都不知道reboot system now什么意思?更别说说如何去解决了。下面就来介绍几种
当嵌入式系统出现严重问题时,我倾向于将错误写入闪存中的特殊日志文件,然后重新启动(如果内存不足,则没有太多选择)。 我意识到这可能会出错,所以我尝试将其最小化(通过在最终写入期间不分配任何内存,并提高
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Any way to “reboot” the JVM? 我在 JRE/lib/ext 文件夹中添加了 tools.
我想新建文件 libdvm.so(在对 vm 代码进行少量更改之后)。我在构建后得到了文件。我使用 将文件推送到模拟器中 $ adb push libdvm.so /system/lib/libdvm
假设您的 bash 脚本中有这两个语句: # No. 1 MSG="Automatic reboot now." echo $MSG # No. 2 MSG=""Automatic reboot no
我在 crontab 中有这个命令,使用 Ansible cron 模块添加。“@reboot supervisord -c *conffilepath”,但这在重启过程中不起作用。但是在手动执行时工
我正在尝试在 SUSE 重新启动时执行名为“测试”的脚本。所以我把这个简单的脚本放在'/etc/init.d'代码是这样的 #!/bin/bash # ScriptName=testing cat >
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 8 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试通过每晚运行的 shell 脚本在我的设备上运行一些测试包,为此我需要运行 adb reboot 命令。我的问题是“adb reboot”命令确实使系统重新启动,但它永远不会完成(如果我手动
我有一个 Python 脚本,它只是简单地编写一些文本并将其保存到一个文件中 #! /usr/bin/python3 def main(): filename = '/home/user/t
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
有没有办法重启JVM?如实际上并没有退出,而是关闭并重新加载所有类,然后从顶部运行 main? 最佳答案 您最好的选择可能是在循环中运行 java 解释器,然后退出。例如: #!/bin/sh whi
我目前有一个场景,我需要使用 burn 执行以下操作 安装 Windows 成像组件 安装 Windows Installer 4.5 安装 .Net 4 Web 运行我的安装程序(使用 Wix 3.
假设情况:假设我在 ASP.Net Web 系统中使用了一个第 3 方 .net 程序集,我正在处理它,但时不时会崩溃。当它这样做时,所有对它的调用都会抛出异常,直到系统重新启动。显然,这有点次优。
我用过 this测试我自己的应用程序重启广播的问题。即, C:\Eclipse\sdk\platform-tools>adb shell am broadcast -a android.intent
我已经创建了无障碍服务,我想调用 OnAccessibilityEvent()仅当“关机”菜单出现时,我的目标是调用 TTS 引擎,以便仅当屏幕上出现此菜单时才让手机通话。 我需要了解的是如何检测这唯
我试图覆盖 box-sizing: border-box; 属性,但它仍然保持不变。 我已经尝试使用内联 css,例如:box-sizing: initial !important;,但它没有用。 正
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 此问题似乎与 a specific programming problem, a sof
我有一个 python 项目,我需要使用 uWSGI 在屏幕上运行,如果我运行脚本: screen -d -m uwsgi --emperor "/home/rrcms/wsgi.ini" --soc
我发现我的 android 图像存在问题,命令 adb reboot bootloader 只是重新启动 android,而不是进入引导加载程序模式。 为了解决这个问题,我做了一些研究,发现实际上有两
我是一名优秀的程序员,十分优秀!