1

我正在编写一个应用程序来跟踪最近在 Android TV 上使用了哪些应用程序。我已经为普通的 Android 手机编写了它,它运行良好。但是,当我将代码带到 Android TV 时,它不起作用。我做过的事情。

  1. 在 AndroidManifest.xml 中声明

    <uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions"/>
    
  2. 检查我是否没有使用权限,调出设置

    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_USAGE_ACCESS_SETTINGS);
    startActivity(intent);
    
  3. 使用UsageStatsManager查询上次使用的包名

    List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, currentTime - 1000 * 10, currentTime);
    

但是,我的应用程序在需要启动Usage Access 活动时失败了

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.kantarmedia.tvcomp.kantartvcompanion, PID: 7727
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kantarmedia.tvcomp.kantartvcompanion/com.kantarmedia.tvcomp.kantartvcompanion.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.USAGE_ACCESS_SETTINGS }

似乎 Android TV 不允许此功能(这是来自 Android TV Emulator)。因此,如果没有此权限,UsageStatsManager总是返回一个空字符串。

有谁知道如何解决这个问题,或者是否有另一种方法来完成这个任务?

我的目标是跟踪当前在 Android TV 上处于前台的应用程序(同样它已经在 Android 手机上运行)。把它想象成一个应用程序,通过衡量用户在每个应用程序上花费的时间来研究应用程序的受欢迎程度。

4

0 回答 0