访问Android手机中使用的蜂窝数据和wifi数据的记录

时间:2015-09-28 05:02:03

标签: android

我想在应用程序级别访问Android手机中的数据使用情况。

在带有棒棒糖5.1的手机中,它提供了一个漂亮的数据使用情况图表。限制使用的设置。我认为此功能来自Kitkat更新。

我想要这条记录,如果没有公共API,还有其他办法吗?

1 个答案:

答案 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 但是,您只需导航到外部屏幕。