Ich wurde zuvor Android-Anwendung für App-Sperre entwickelt, die auf Idee des laufenden laufenden Prozesses Paketname für beide unter Lollipop und über Lollipop-Versionen ausgeführt wird. Aber jetzt in Marshmallow gibt es ein Problem, den richtigen Paketnamen aufgrund von Benachrichtigungen zu erhalten. Ja, als die Benachrichtigung kam, wurde der Paketname des aktuell ausgeführten Prozesses in den Namen des Apps-Pakets geändert, von dem die Benachrichtigung kam. Kurz gesagt, wenn ich Messenger bin und plötzlich die WhatsApp-Benachrichtigung kam und der Paketname des obersten laufenden Prozesses com.whatsapp lautet. und meine App-Sperre wird geöffnet. Ich bin mit diesen Methoden laufenden Anwendung des Paketnamen zu erhalten:UsageStatsManager Start Rückkehr Paketname von neuen Benachrichtigung und nicht laufenden
// API below 21
@SuppressWarnings("deprecation")
public static String getProcessOld(Context c) throws Exception {
String topPackageName = null;
ActivityManager activity = (ActivityManager) c.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTask = activity.getRunningTasks(1);
if (runningTask != null) {
RunningTaskInfo taskTop = runningTask.get(0);
ComponentName componentTop = taskTop.topActivity;
topPackageName = componentTop.getPackageName();
}
return topPackageName;
}
// API 21 and above
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static String getProcessNew(Context c) throws Exception {
String st = null;
try {
// st = getProcess();
UsageStatsManager mUsageStatsManager = (UsageStatsManager) c.getSystemService("usagestats");
long endTime = System.currentTimeMillis();
long beginTime = endTime - 1000 * 10;
// We get usage stats for the last minute
List<UsageStats> stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, beginTime,
endTime);
// Sort the stats by the last time used
if (stats != null) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : stats) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
st = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
} catch (Exception e) {
Log.d("main", "Wxxxxexx " + e);
}
return st;
}
Gibt es eine Methode, wie kann ich nur Paketnamen erhalten Anwendungs auf der Benutzeroberfläche ausgeführt wird oder von der Kennzeichnungspflicht filtern und entfernen. Dieses Problem tritt nur von Marshmallow auf.
Haben Sie über die Berechtigung zum Lesen von Benachrichtigungen gedacht? – JacksOnF1re