Skip to content

方法4,queryUsageStats偶尔返回空集合,导致return false认为并不在前台(其实在) #17

Open

Description

@Drinkwatermore

我这样改了下就好了。
原:
/*
if (usageStats == null || usageStats.size() == 0) {
if (HavaPermissionForTest(context) == false) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Toast.makeText(context, "权限不够\n请打开手机设置,点击安全-高级,在有权查看使用情况的应用中,为这个App打上勾", Toast.LENGTH_SHORT).show();
}
//发现造成这里的false 是因为 usageStats.size() == 0,即空集合(实际手机有任务存在)
// boolean r = (usageStats == null);
//android.util.Log.e("Current","usageStats:null:"+r);

        return false;
    }*/

改后:
//改一下上面的
if (usageStats == null || usageStats.size() == 0) {
if (HavaPermissionForTest(context) == false) {
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

            //1.我是子线程里使用Toast
            Looper.prepare();
            Toast.makeText(context, "权限不够\n请打开手机设置,点击安全-高级,在有权查看使用情况的应用中,为这个App打上勾", Toast.LENGTH_SHORT).show();
            Looper.loop();// 进入loop中的循环,查看消息队列

            //2.添加这里,
            return false;
        }
        //3.一定得返回,不然后面会下标越界,估计返回true,一直检查的话,马上就会有真实情况
        return true;
    }

Activity

  1. wenmingvs commented on Feb 3, 2017

    @wenmingvs
    Owner
  2. xingstarx commented on Feb 21, 2017

    @xingstarx

    我也碰到过类似的这种问题,之前的做法是保存usageStats.get(0),因为在某些rom上,长时间停留的话,获取到的usageStats是空List,这个时候我们只需要取上一次保存的usageStats.get(0)即可,然后在进行判断。

  3. fr0zenrain commented on May 12, 2022

    @fr0zenrain

    上一次?时间怎么控制

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions