在我的Android应用程序中,我每天在预定义的时间触发预定义的通知,以查找用户的输入。我正在使用powerManager
类课&获取唤醒锁。我能够做到这一点,但我的要求是,如果用户正在主动用他/她的设备做某事,我的通知应该等待。如何让我的android应用程序等待isInteractive()方法有效返回false?
我尝试过使用powerManager
类提供的isInteractive()
方法(代码如下),操作系统有时会抛出ANR(应用程序无响应),它有时会跳过通知。
我创建了一个新线程,只是为了让我的应用程序等待,直到设备未被使用,然后我打电话给我的通知发射部分。
Public class myClass extends BroadcastReceiver{
private void checkPhoneUsage(Context context, int alarmId){
final PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
mThread = new Thread(new Runnable() {
@Override
public void run() {
try{
if(Build.VERSION.SDK_INT >= 20)
while(pm.isInteractive())
Thread.sleep(10000);
else if (Build.VERSION.SDK_INT < 20)
while (pm.isScreenOn())
Thread.sleep(10000);
// Call the method which fires Notification.
// fireNotification(alarmId);
}
catch (Exception e){
Log.e(Tag,"Error during thread.sleep");
}
}
});
}
}
我尝试使用SystemClock.wait(ms)
但问题又来了重复,也失败,因为它不应该在UI线程中使用。
你不能像主持人那样永远保持主线程。 – njzk2
@ njzk2,有没有一种方法可以暂停线程(&离开系统资源),然后在某个时候返回(比如说10secs)并检查它是否空闲? – Ravi
我不确定我了解您的用例。你是否等到用户停止使用手机,然后发出通知? – njzk2