AndroidProcess icon indicating copy to clipboard operation
AndroidProcess copied to clipboard

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

Open Drinkwatermore opened this issue 7 years ago • 3 comments

我这样改了下就好了。 原: /* 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;
    }

Drinkwatermore avatar Feb 03 '17 07:02 Drinkwatermore

抱歉,新年工作第一天, 忙不过来,没有及时回复您的邮件。关于你提到的问题,由于代码太久远,我需要一些时间来review一下逻辑,在review完成后会对你的问题进行答复,希望见谅。

[email protected]

发件人: 词汇族 发送时间: 2017-02-03 15:58 收件人: wenmingvs/AndroidProcess 抄送: Subscribed 主题: [wenmingvs/AndroidProcess] 方法4,queryUsageStats偶尔返回空集合,导致return false认为并不在前台(其实在) (#17) 我这样改了下就好了。 原: /* 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; }

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

wenmingvs avatar Feb 03 '17 08:02 wenmingvs

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

xingstarx avatar Feb 21 '17 07:02 xingstarx

上一次?时间怎么控制

fr0zenrain avatar May 12 '22 02:05 fr0zenrain