以前に開発されたアプリロックのアンドロイドアプリケーションは、現在の実行プロセスのパッケージ名をロリポップとロリポップのバージョンの両方で取得しています。しかし、今やマシュマロでは、通知のために正しいパッケージ名を得るという問題があります。はい、通知が来たとき、現在実行中のプロセスのパッケージ名が通知が来たアプリパッケージ名に変更されます。要するに私がメッセンジャーにいて、突然whatsapp通知が来て、実行中のプロセスのパッケージ名がcom.whatsappになります。私のアプリのロックが開きます。私は、現在実行中のアプリケーションのパッケージ名を取得するためにこれらのメソッドを使用しています:UsageStatsManagerが新しい通知からpackagenameを返すようになりました。現在実行中ではありません。
// 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;
}
ですが、私は、ユーザー・インターフェース上でアプリケーションを実行または通知からそれをフィルタリングし、それを削除するだけでパッケージ名を取得する方法のいずれかの方法。この問題は、マシュマロのみから発生します。
通知の読み取りの許可についての考えですか? – JacksOnF1re