Windows 10 Dernière version d'Android Studio Java
** Cette méthode a bien fonctionné sur mon smartphone à partir du 27/02/2020. ** ** ** Il peut y avoir des changements dans les spécifications, donc si vous le copiez et collez et que cela ne fonctionne pas, veuillez vous référer au document officiel. ** **
J'avais besoin de savoir combien d'autres applications fonctionnaient ce jour-là. Par exemple, l'image ci-dessous est une application appelée ActionDash, qui montre les heures de lancement d'autres applications.
En conclusion, vous pouvez utiliser UsageStatsManager.
UsageStatsManager
Tout d'abord, écrivez-le dans ʻAndroidManifest.xml` comme indiqué ci-dessous.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="****">
<!--Ajout des deux lignes ci-dessous-->
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<application>
<!--réduction-->
</application>
</manifest>
Ensuite, effectuez une vérification des autorisations. Utilisez une méthode spéciale au lieu de la méthode d'autorisation habituelle.
private boolean checkReadStatsPermission() {
//Obtenez AppOpsManager
AppOpsManager aom = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
// GET_USAGE_Obtenir le statut STATS
int mode = aom.checkOp(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), getPackageName());
if (mode == AppOpsManager.MODE_DEFAULT) {
//Si l'état AppOps est la valeur par défaut, effectuez une vérification normale des autorisations.
//Faux pour les applications ordinaires
return checkPermission("android.permission.PACKAGE_USAGE_STATS", android.os.Process.myPid(), android.os.Process.myUid()) == PackageManager.PERMISSION_GRANTED;
}
//Uniquement autorisé est vrai si l'état AppOps n'est pas la valeur par défaut
return mode == AppOpsManager.MODE_ALLOWED;
}
Enfin, il y a une demande d'autorisation. Veuillez noter que ceci est également différent de la méthode habituelle.
if (!checkReadStatsPermission()) {
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
}
L'explication est incluse dans le code source. Ce code source obtient le temps d'utilisation de l'application pour la journée.
public class UsageStatsClass {
// Log.d()Et le nom pour l'identifier comme la sortie de cette classe
private static final String TAG = UsageStatsClass.class.getSimpleName();
//Contexte de substitution de MainActivity
private Context context;
public UsageStatsClass(Context mContext) {
//Contexte de substitution
context = mContext;
}
//Un objet appelé UsageStats est des informations pour une application.(Temps d'utilisation de l'application, etc.)Est inclus
//Autrement dit, un UsageStats est attribué à chaque application.
private List<UsageStats> getUsageStatsObject() {
// getSystemService()Pour obtenir UsageStatsManager
//UsageStatsManager est pour obtenir des informations d'utilisation de l'application
UsageStatsManager usageStatsManager =
(UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
//Obtenir l'heure actuelle sous forme d'objet de calendrier
Calendar calendar = Calendar.getInstance();
//Réglez l'heure du calendrier sur minuit
//En conséquence, les informations d'heure contenues dans le calendrier seront de l'heure actuelle à minuit d'aujourd'hui.
calendar.set(Calendar.HOUR_OF_DAY, 0);
// queryUsageStats(Unité de temps pour obtenir,Le début du temps pour obtenir, la fin du temps pour obtenir)
//Unité de temps pour obtenir:du quotidien(INTERVAL_DAILY), Hebdomadaire(INTERVAL_WEEKLY), Mensuel(INTERVAL_MONTHLY)、
//Annuel(INTERVAL_YEARLY), Sélection automatique(INTERVAL_BEST)Il y a
//
//Le début du temps pour obtenir:Le point de départ du fuseau horaire des données que vous souhaitez acquérir. Cette fois, il est minuit.
//Fin des temps pour obtenir:La fin du fuseau horaire des données que vous souhaitez obtenir. Cette fois, l'heure actuelle.
return usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_DAILY,
calendar.getTimeInMillis(),
System.currentTimeMillis());
}
//Fonction à exécuter de l'extérieur
public void readOneDayUsageStats() {
//Obtenir des informations sur l'utilisation de chaque application sous forme de liste
List<UsageStats> usageStats = getUsageStatsObject();
//Obtenir les informations d'utilisation d'une application dans usageStat à l'aide de l'instruction for
for (UsageStats usageStat : usageStats) {
//Si vous n'avez jamais utilisé l'application, ignorez-la
if (usageStat.getTotalTimeInForeground() == 0) {
continue;
}
//Sortie des informations acquises avec Logcat
// package name : getPackageName() :ID unique à cette application
// total time displayed : getTotalTimeInForeground() :Durée totale d'affichage de l'application à l'écran
// first time : getFirstTimeStamp() :Renvoie l'heure de début des données acquises en millisecondes
// getStringDate()Est utilisé pour convertir la milliseconde en une forme conviviale pour l'homme
// end time : getLastTimeUsed() :Renvoie l'heure de fin des données récupérées en millisecondes
// getStringDate()Est utilisé pour convertir la milliseconde en une forme conviviale pour l'homme
Log.d(TAG, "packageName: " + usageStat.getPackageName() + "\ttotalTimeDisplayed: " + usageStat.getTotalTimeInForeground()
+ "\tfirstTime: " + getStringDate(usageStat.getFirstTimeStamp()) + "\tlastTime: " + getStringDate(usageStat.getLastTimeUsed()));
}
}
//Convertir la milliseconde de type long en forme conviviale de type chaîne
private String getStringDate(long milliseconds) {
final DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.JAPANESE);
final Date date = new Date(milliseconds);
return df.format(date);
}
}
L'heure est affichée pour chaque application. Tu l'as fait!
D/UsageStatsClass: packageName: com.huawei.android.launcher totalTimeDisplayed: 3769989 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 15:59:00
D/UsageStatsClass: packageName: jp.naver.line.android totalTimeDisplayed: 805413 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 15:34:36
D/UsageStatsClass: packageName: com.discord totalTimeDisplayed: 4247 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 15:43:05
D/UsageStatsClass: packageName: com.microsoft.office.outlook totalTimeDisplayed: 43011 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 14:19:16
D/UsageStatsClass: packageName: com.google.android.packageinstaller totalTimeDisplayed: 2444 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 15:59:02
D/UsageStatsClass: packageName: com.google.android.apps.photos totalTimeDisplayed: 283917 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 13:38:33
D/UsageStatsClass: packageName: com.spotify.music totalTimeDisplayed: 6267989 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 13:56:21
D/UsageStatsClass: packageName: jp.mineo.app.phone totalTimeDisplayed: 70175 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 13:59:50
D/UsageStatsClass: packageName: com.google.android.apps.translate totalTimeDisplayed: 8170 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 15:04:14
D/UsageStatsClass: packageName: ch.bitspin.timely totalTimeDisplayed: 798142 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 11:17:25
D/UsageStatsClass: packageName: com.android.settings totalTimeDisplayed: 21715 firstTime: 2020/02/27 00:00:02 lastTime: 2020/02/27 14:32:32