我想在应用程序级别访问Android手机中的数据使用情况。
在带有棒棒糖5.1的手机中,它提供了一个漂亮的数据使用情况图表。限制使用的设置。我认为此功能来自Kitkat更新。
我想要这条记录,如果没有公共API,还有其他办法吗?
答案 0 :(得分:0)
首先,要获取数据,您应该使用UsageStatsManager或ActivityManager,具体取决于您使用的SDK版本。以下是获取当前正在运行的应用程序名称的简单示例:
String currentApp = "NULL";
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
UsageStatsManager usm = (UsageStatsManager) activity.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if ((appList != null) && (appList.size() > 0)) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : appList) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if ((mySortedMap != null) && (!(mySortedMap.isEmpty()))) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
} else {
ActivityManager activityManager = (ActivityManager) currentlyDisplayedScreen.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE);
currentApp = services.get(0).topActivity.getPackageName().toString()
}
这些类也可用于获取其他有用的数据,包括每个应用程序在前台的时间。如果您使用此权限,则需要以下权限:
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
我不知道你是否可以复制使用情况统计图表本身,但我已经使用Android的画布绘制了各种各样的东西,包括显示不同类别数据的彩色图表。您可以创建一个自定义视图,该视图会覆盖onDraw()方法,以根据您拥有的当前数据绘制图表:
public class StatisticsChartView extends View {
...
@Override
protected void onDraw(Canvas canvas) {
if (values != null) {
float sliceStartPoint = 200;
path.addCircle(rectF.centerX(), rectF.centerY(), 250, Direction.CW);
canvas.clipPath(path, Op.DIFFERENCE);
...
}
我的假设是您希望将图表放在您自己的应用程序中,但如果您需要,您可以简单地启动设备的Android数据使用屏幕: Which Intent for Settings - Data usage 但是,您只需导航到外部屏幕。