Windows 10 Android Studio neueste Version Java
** Diese Methode hat auf meinem Smartphone ab dem 27.02.2020 einwandfrei funktioniert. ** ** ** ** Die Spezifikationen können sich ändern. Wenn Sie sie also kopieren und einfügen und sie nicht funktioniert, lesen Sie bitte das offizielle Dokument. ** ** **
Ich musste herausfinden, wie viele andere Apps an diesem Tag ausgeführt wurden. Das folgende Bild ist beispielsweise eine App namens ActionDash, die die Startzeiten anderer Apps anzeigt.
Abschließend können Sie UsageStatsManager verwenden.
UsageStatsManager
Schreiben Sie es zuerst in "AndroidManifest.xml", wie unten gezeigt.
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="****">
<!--Die beiden folgenden Zeilen wurden hinzugefügt-->
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
<application>
<!--Kürzung-->
</application>
</manifest>
Führen Sie als Nächstes eine Berechtigungsprüfung durch. Verwenden Sie anstelle der üblichen Berechtigungsmethode eine spezielle Methode.
private boolean checkReadStatsPermission() {
//Holen Sie sich AppOpsManager
AppOpsManager aom = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
// GET_USAGE_Erhalten Sie den STATS-Status
int mode = aom.checkOp(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), getPackageName());
if (mode == AppOpsManager.MODE_DEFAULT) {
//Wenn der AppOps-Status der Standardstatus ist, führen Sie eine normale Berechtigungsprüfung durch.
//Falsch für normale Apps
return checkPermission("android.permission.PACKAGE_USAGE_STATS", android.os.Process.myPid(), android.os.Process.myUid()) == PackageManager.PERMISSION_GRANTED;
}
//Nur erlaubt ist wahr, wenn der AppOps-Status nicht der Standard ist
return mode == AppOpsManager.MODE_ALLOWED;
}
Schließlich gibt es eine Bitte um Erlaubnis. Bitte beachten Sie, dass sich dies auch von der üblichen Methode unterscheidet.
if (!checkReadStatsPermission()) {
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
}
Die Erklärung ist im Quellcode enthalten. Dieser Quellcode gibt die App-Nutzungszeit für den Tag an.
public class UsageStatsClass {
// Log.d()Und der Name, um es als Ausgabe dieser Klasse zu identifizieren
private static final String TAG = UsageStatsClass.class.getSimpleName();
//Ersatzkontext von MainActivity
private Context context;
public UsageStatsClass(Context mContext) {
//Ersatzkontext
context = mContext;
}
//Ein Objekt namens UsageStats ist eine Information für eine App.(Nutzungszeit der App usw.)Ist enthalten
//Das heißt, jeder App wird eine UsageStats zugewiesen.
private List<UsageStats> getUsageStatsObject() {
// getSystemService()So rufen Sie UsageStatsManager ab
//UsageStatsManager dient zum Abrufen von Nutzungsinformationen der Anwendung
UsageStatsManager usageStatsManager =
(UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
//Ruft die aktuelle Uhrzeit als Kalenderobjekt ab
Calendar calendar = Calendar.getInstance();
//Stellen Sie die Kalenderzeit auf Mitternacht ein
//Infolgedessen sind die im Kalender enthaltenen Zeitinformationen von der aktuellen Zeit bis zur heutigen Mitternacht.
calendar.set(Calendar.HOUR_OF_DAY, 0);
// queryUsageStats(Zeiteinheit zu bekommen,Der Anfang der Zeit zu bekommen, das Ende der Zeit zu bekommen)
//Zeiteinheit zu bekommen:Täglich(INTERVAL_DAILY), Wöchentlich(INTERVAL_WEEKLY)Monatlich(INTERVAL_MONTHLY)、
//Jährlich(INTERVAL_YEARLY), Automatische Auswahl(INTERVAL_BEST)Es gibt
//
//Der Beginn der Zeit zu bekommen:Der Startpunkt der Zeitzone der Daten, die Sie erfassen möchten. Diesmal ist Mitternacht des Tages.
//Ende der Zeit zu bekommen:Das Ende der Zeitzone der Daten, die Sie abrufen möchten. Diesmal die aktuelle Zeit.
return usageStatsManager.queryUsageStats(
UsageStatsManager.INTERVAL_DAILY,
calendar.getTimeInMillis(),
System.currentTimeMillis());
}
//Funktion zur Ausführung von außen
public void readOneDayUsageStats() {
//Erhalten Sie Nutzungsinformationen für jede App als Liste
List<UsageStats> usageStats = getUsageStatsObject();
//Rufen Sie mithilfe der for-Anweisung Nutzungsinformationen einer App in usageStat ab
for (UsageStats usageStat : usageStats) {
//Wenn Sie die App noch nie verwendet haben, überspringen Sie sie
if (usageStat.getTotalTimeInForeground() == 0) {
continue;
}
//Geben Sie die erfassten Informationen mit Logcat aus
// package name : getPackageName() :ID eindeutig für diese App
// total time displayed : getTotalTimeInForeground() :Gesamtzeit, in der die App auf dem Bildschirm angezeigt wurde
// first time : getFirstTimeStamp() :Gibt die Startzeit der erfassten Daten in Millisekunden zurück
// getStringDate()Wird verwendet, um Millisekunden in eine menschenfreundliche Form umzuwandeln
// end time : getLastTimeUsed() :Gibt die Endzeit der abgerufenen Daten in Millisekunden zurück
// getStringDate()Wird verwendet, um Millisekunden in eine menschenfreundliche Form umzuwandeln
Log.d(TAG, "packageName: " + usageStat.getPackageName() + "\ttotalTimeDisplayed: " + usageStat.getTotalTimeInForeground()
+ "\tfirstTime: " + getStringDate(usageStat.getFirstTimeStamp()) + "\tlastTime: " + getStringDate(usageStat.getLastTimeUsed()));
}
}
//Konvertieren Sie eine Millisekunde vom Typ Lang in eine benutzerfreundliche Form vom Typ String
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);
}
}
Die Uhrzeit wird für jede App angezeigt. Du hast es geschafft!
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
Recommended Posts