bangdel
bangdel

Reputation: 2553

Get usage time for individual apps programmatically iOS

Is it possible to get the usage time for each app on my iPhone programatically? I want to create an app which tells me how much time I spend on each app on my iPhone.

Upvotes: 1

Views: 1530

Answers (3)

Vinoth Kannan
Vinoth Kannan

Reputation: 166

From this code you can get starting time of the process

- (NSArray *)runningProcesses
{

int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0};
size_t miblen = 4;

size_t size;
int st = sysctl(mib, miblen, NULL, &size, NULL, 0);

struct kinfo_proc * process = NULL;
struct kinfo_proc * newprocess = NULL;

do {

    size += size / 10;
    newprocess = realloc(process, size);

    if (!newprocess){

        if (process){
            free(process);
        }

        return nil;
    }

    process = newprocess;
    st = sysctl(mib, miblen, process, &size, NULL, 0);

} while (st == -1 && errno == ENOMEM);

if (st == 0){

    if (size % sizeof(struct kinfo_proc) == 0)
    {
        int nprocess = size / sizeof(struct kinfo_proc);

        if (nprocess)
        {

            array = [[NSMutableArray alloc] init];

            for (int i = nprocess - 1; i >= 0; i--)
            {

                processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid];
                processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm];
                NSString * processStartTime = [[NSString alloc] initWithFormat:@"%ld", process[i].kp_proc.p_starttime.tv_sec];
                NSString * priority = [[NSString alloc] initWithFormat:@"%hhu", process[i].kp_proc.p_priority];
                NSString * status = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_stat];

                NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,processStartTime,priority,status, nil] forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"Time", @"Priority",@"Status", nil]];
                [array addObject:dict];
                 NSLog(@"PID %d",process[i].kp_proc.p_pid);
            }

            free(process);
            NSLog(@"Array %@",array);
        }
    }
}
return nil;

}

Blockquote

Upvotes: 1

neilco
neilco

Reputation: 8012

No. Each app is isolated in its own sandbox. You can only receive usage information for your apps and not those by other developers. And that's only if you add that functionality yourself.

Upvotes: 1

lukaswelte
lukaswelte

Reputation: 3001

Short answer: NO

Longer answer: Just using a jailbreak.

Upvotes: 1

Related Questions