0

私は以前、ロリポップの下と上の両方のバージョンの現在実行中のプロセスのパッケージ名を取得するというアイデアで実行されているアプリロック用のAndroidアプリケーションを開発しました。しかし、現在マシュマロでは、通知のために正しいパッケージ名を取得できないという問題があります。はい、通知が来ると、現在実行中のプロセスのパッケージ名は、通知が来たアプリのパッケージ名に変更されます。要するに、メッセンジャーを使用していて、突然whatsapp通知が届き、実行中のプロセスのパッケージ名がcom.whatsappになります。私のアプリロックが開きます。これらのメソッドを使用して、現在実行中のアプリケーションのパッケージ名を取得しています。

    // 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;
}

ユーザー インターフェイスで実行中のアプリケーションのパッケージ名のみを取得する方法や、通知からフィルター処理して削除する方法はありますか。この問題は、マシュマロからのみ発生します。

4

1 に答える 1