美文网首页
安卓5.0上下应用锁的实现方法

安卓5.0上下应用锁的实现方法

作者: 让我爱胡蝶 | 来源:发表于2017-06-26 15:12 被阅读234次

    转载:Android 5.0以后版本打开“有权查看使用情况的应用”

    1. 应用锁简单介绍
      本文仅讨论如何获得最近运行应用
      这里的应用锁的功能是指的是禁止打开某些特定的应用,或者打开后也会自动关闭。
      简单的介绍一下应用锁实现的方式:后台开一个Service,是Service里开一个Runnable,在实现中每过几秒检测当前应用是否可以打开。
    2. 顶层应用
    3. 5.0以下可以直接获取顶层应用。
      需要声明<uses-permission android:name="android.permission.GET_TASKS"/>
                    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
                    List<RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
                    if (!ListUtils.isEmpty(tasksInfo)) {
                        retuString = tasksInfo.get(0).topActivity.getPackageName();
                    }
    
    1. 5.0以上需要<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"></uses-permission>这个权限虽然说是系统权限,但是可以用下面的方法申请到。
    /***
         * 有没有这个设置,必须要开启这个设置才能得到最近任务
         * @param pContext 上下文
         * @return true有false没有
         */
        public static boolean isUsageOption(Context pContext) {
            PackageManager packageManager = pContext.getApplicationContext()
                    .getPackageManager();
            Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
            List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
                    PackageManager.MATCH_DEFAULT_ONLY);
            return list.size() > 0;
        }
    
        /***
         * 当前的状态
         * @param pContext 上下文
         * @return true开启false关闭
         */
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public static boolean isUsageSwitch(Context pContext) {
            long ts = System.currentTimeMillis();
            UsageStatsManager usageStatsManager = (UsageStatsManager) pContext.getApplicationContext()
                    .getSystemService(Context.USAGE_STATS_SERVICE);
            List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(
                    UsageStatsManager.INTERVAL_BEST, 0, ts);
            if (queryUsageStats == null || queryUsageStats.isEmpty()) {
                return false;
            }
            return true;
        }
    
        /***
         * 打开权限界面
         * @param pContext 上下文
         * @param requestCode 请求码
         */
        public static void openUsageActivity(Context pContext, int requestCode) {
            if (pContext == null) {
                throw new RuntimeException(UsageStatsUtils.class.getName() + " context null");
            }
            Intent intent = new Intent(
                    Settings.ACTION_USAGE_ACCESS_SETTINGS);
            if (pContext instanceof Activity) {
                ((Activity) pContext).startActivityForResult(intent, requestCode);
            }
        }
    

    申请到权限后才能使用下面的方法获取最近任务。(但不是很准确,如果在设定的时间内没有任何操作,那么取到的最任务为空)。

      UsageStatsManager usm = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
                    long time = System.currentTimeMillis();
                    List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_BEST, time - 5 * 1000, time);//检查5秒内的应用情况
                    if (appList != null && appList.size() > 0) {
                        SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
                        for (UsageStats usageStats : appList) {
                            mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
                        }
                        if (mySortedMap != null && !mySortedMap.isEmpty()) {
                            retuString = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
                        }
                    }
    

    当前检测到当前应用允许运行时,可以执行以下操作打开默认桌面。

    ```
    

    Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory(Intent.CATEGORY_HOME);
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(homeIntent);

    相关文章

      网友评论

          本文标题:安卓5.0上下应用锁的实现方法

          本文链接:https://www.haomeiwen.com/subject/nshjcxtx.html