PERMISSIONS
LAST UPDATED: SEPTEMBER 2026
PipStats measures how you use this device: how long each app spends in the foreground, how often it is opened, how much network traffic it moves, and how much battery it costs you. All of that is read from Android's own usage APIs and written to a local database on the device. There is no server, no account and no analytics, so none of it is ever uploaded — see the Privacy Policy.
This page lists every permission in the installed package, what it is for, and how to grant the ones Android will not grant automatically.
1. Permissions the app requests
| Permission | What it is used for | Required? |
|---|---|---|
PACKAGE_USAGE_STATS"Usage access" |
The core of the app. Reads per-app foreground time and launch
counts from UsageStatsManager, and per-app network bytes from
NetworkStatsManager. Everything on the SYSTEM tab and every
per-app battery estimate is derived from it. |
Yes — without it the statistics screens are empty. |
FOREGROUND_SERVICEFOREGROUND_SERVICE_SPECIAL_USE |
Keeps measurement running while the app is closed. Android only
holds a few days of usage history, so the service samples it into the local
database before it expires. The specialUse subtype is declared as
continuous on-device battery and app-usage measurement; no standard service
type covers passive telemetry of the device itself. |
Yes — without it history has gaps whenever the app is closed. |
POST_NOTIFICATIONS |
Shows the ongoing notification for that service. It is the only indication that monitoring is running, which is why the app asks for it rather than running invisibly. | Yes on Android 13+ — otherwise the service runs with its notification suppressed. |
RECEIVE_BOOT_COMPLETED |
Restarts monitoring after a reboot. Without it the service stays down until you next open the app, leaving a hole in the history. | Yes, for uninterrupted history. |
INTERNET |
Read-only RPC calls to public Solana endpoints, used only by the VAULT tab to show balances and token holdings for an address you connect, and to submit a tip transaction you signed yourself. No usage or battery data is sent. | Only for the wallet features. Statistics work offline. |
2. Permissions added by libraries, not by the app
Two entries in the package's permission list come from dependencies through Android's manifest merger. The app never calls them directly.
| Permission | Source | Effect |
|---|---|---|
ACCESS_NETWORK_STATE |
com.solanamobile:mobile-wallet-adapter-clientlib-ktx |
Normal-level. Lets the wallet library check whether a connection exists before attempting an RPC call. |
com.pipstats.app.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
Generated by androidx.core |
A signature-level permission the app defines for itself, so that broadcast receivers registered at runtime are not reachable by other apps. It grants nothing outside this package. |
3. Things that need no permission at all
Worth stating, because people reasonably expect otherwise:
- Exporting your usage table as CSV. The app opens the system save dialog; you choose the folder and the file name, and Android grants the app access to that one file. No storage permission is involved, and the app cannot see anything else in the location you picked — nor read the file back afterwards.
- Opening a link from the app. Links hand off to your browser through a normal intent.
4. Permissions removed
Earlier builds declared four permissions that this version no longer requests. They are listed here so the change is verifiable rather than merely claimed:
QUERY_ALL_PACKAGES— replaced by a scoped<queries>declaration, which is enough to label the apps in your own usage list.READ_NETWORK_USAGE_HISTORY— a privileged permission that is never granted to store-installed apps. Per-app network figures come from Usage access instead, so it did nothing.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS— the app now opens the battery optimization list in Settings, which needs no permission and ends at the same switch.REORDER_TASKS— declared byandroidx.test:core, an Android test library that a beta build of the wallet client pulls into the release classpath. Neither the app nor wallet signing reorders a task, so the permission is stripped from the merged manifest.
5. How to grant them
Exact wording differs between manufacturers; the order below is the order you will meet them.
A. USAGE ACCESS — required
Android does not offer a pop-up for this one, so it cannot be requested from inside the app. The GRANT ACCESS button only opens the right Settings screen; the switch itself has to be flipped there.
Settings › Apps › Special app access › Usage access › PipStats › Permit usage accessOn some skins the same screen is at Settings › Security & privacy › More › Special app access, or Settings › Privacy protection › Special permissions. Searching Settings for "usage access" finds it on every build.
Without it: the SYSTEM tab stays empty, per-app battery estimates cannot be produced, and per-app network figures are unavailable.
If the switch will not move
This is the step almost everyone gets stuck on, and it is not the app's doing. When Android decides an install came from outside an app store — an APK opened from a browser or a file manager — it puts Usage access behind a block called restricted settings. The switch looks normal but does nothing, and tapping it shows:
"App was denied access — Access to this permission can put your personal and financial info at risk."
Nothing is wrong with the permission or the app; Android wants one deliberate step first:
- Go to Settings › Apps › PipStats. (In the app, the setup guide has an OPEN APP INFO button that lands here.)
- Tap the three dots ⋮ in the top-right corner.
- Choose Allow restricted settings. On some builds it is Allow restricted setting, singular.
- Go back to Usage access and flip the switch — it now works.
If the three-dot menu has no such entry, this install is not restricted and the switch should already work; check that you are looking at PipStats and not a similarly named row.
Every app that measures screen time needs this same switch, so the block is worth knowing about beyond this one app.
B. NOTIFICATIONS — required on Android 13+
Asked once as a standard system dialog on first launch. If it was dismissed or denied:
Settings › Apps › PipStats › Notifications › Allow notificationsWithout it: monitoring still runs, but its ongoing notification is hidden, so nothing tells you whether collection is active.
C. BATTERY OPTIMIZATION — optional
Android's power management can stop background services. Exempting PipStats keeps measurement continuous on devices that are aggressive about it.
Settings › Apps › Special app access › Battery optimization › All apps › PipStats › Don't optimizeWithout it: everything works, but on some hardware the background service is killed and the usage history gains gaps.
D. AUTOSTART — optional, some manufacturers only
Xiaomi/Redmi (MIUI, HyperOS), Huawei/Honor, Oppo, Realme, Vivo and iQOO add their own autostart switch on top of Android's. It is usually under Security › Permissions › Autostart or Settings › Apps › PipStats › Allow auto-launch.
Without it: monitoring does not come back by itself after a reboot until you open the app.
6. Revoking
Usage access can be switched off again at any time on the same Settings screen; the app keeps running, it simply stops collecting. To delete what was already collected, use RESET STATS in the app, or uninstall it — the database lives in the app's private storage and goes with it.
7. Questions
Open an issue at https://github.com/ShevchukIhor/PipStats.