The method returns the same package name for all Google applications.

I am working on a lock application when a user opens any application. my application will start, and if it matches my list, then I will show the lock screen for the user.

What I have done so far.

public static String getTopAppName(Context context) {
            ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            String strName = "";
            try {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    strName = getLollipopFGAppPackageName(context);


                } else {
                    strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName();
                }}
        }

private static String getLollipopFGAppPackageName(Context ctx) {

        try {
            UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats");
            long milliSecs = 60 * 1000;
            Date date = new Date();
            List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());
            if (queryUsageStats.size() > 0) {
                Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size());
            }
            long recentTime = 0;
            String recentPkg = "";
            for (int i = 0; i < queryUsageStats.size(); i++) {
                UsageStats stats = queryUsageStats.get(i);

                if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) {
                    Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp());
                }
                if (stats.getLastTimeStamp() > recentTime) {
                    recentTime = stats.getLastTimeStamp();
                    recentPkg = stats.getPackageName();
                }
            }
            return recentPkg;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

I follow this SO answer to get maximum performance on the device above Lollipop. For this, I created a background service.

The problem I am facing:

1. When a user blocks any applications from my application, I get the package name of this application. e.g. (com.google.android.talk, com.google.android.apps.maps, com.android.chrome).

. com.google.android.gsf Google (, ). .

, getLollipopFGAppPackageName(), , .

2. SO, getLollipopFGAppPackageName() , . , , ​​ ( ) lollipop.

.

+4
1

, , queryUsageStats() , , ​​ . getLastTimeUsed.

rxJava:

 List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, currentTime - milliSecs, currentTime);
                rx.Observable.from(queryUsageStats)
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .toSortedList((usageStats1, usageStats2) -> compareTo(usageStats2.getLastTimeUsed(), usageStats1.getLastTimeUsed()))
                        .subscribe(usageStats -> {
                            Toast.makeText(ctx, usageStats.get(0).getPackageName(), Toast.LENGTH_SHORT).show();

                        });

:

Collections.sort(queryUsageStats, (usageStats1, usageStats2)
                        -> compareTo(usageStats2.getLastTimeUsed(), usageStats1.getLastTimeUsed()));

Toast.makeText(ctx, queryUsageStats.get(0).getPackageName(), Toast.LENGTH_SHORT).show();

private int compareTo(long a, long b) {
        return a == b ? 0 : (a > b ? 1 : -1);
    }


:

// Declare USAGE_STATS permisssion in manifest

    <uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />

//TODO: Check if user has already enabled Device Administrator, don't start this intent.
    Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
    startActivity(intent);


: , , 100%, Google Play. , - , ( , , ...) - , .
, :

  • : . , , , , , -, . , , f_cked: 3.

  • Ultra Ultra STAMINA mode ( , Samsung Sony, ), (, call...), ALL app-lock , shared-user SMS-.

-, :), , , .
, lock-app, .:)

+1

Source: https://habr.com/ru/post/1692343/


All Articles