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

访问Android手机中使用的手机数据和wifi数据记录,android,Android,我想在应用程序级别访问android手机中的数据使用情况 在我的带有棒棒糖5.1的手机中,它提供了一个漂亮的数据使用和限制使用设置的图表。我认为这个功能来自Kitkat更新 我想要这个记录,如果没有公共API,还有其他方法吗?首先,要获取数据,您应该使用USAGestManager或ActivityManager,具体取决于您使用的SDK版本。以下是获取当前运行的应用程序名称的简单示例: String currentApp = "NULL"; if (androi

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

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


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

首先,要获取数据,您应该使用USAGestManager或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()
        }
我的假设是,您希望在自己的应用程序中包含该图表,但如果您愿意,您可以简单地启动设备的Android数据使用屏幕,并具有适当的意图: 但是,您只需导航到外部屏幕。

试试这个
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
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);
         ...
}