在我的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