2014-12-27 114 views
0

我的目標是有一個簡單的程序,每X秒獲取一次圖像URL的內容,將其寫入/ media/screensavers/Messages目錄,然後解鎖並重新鎖定設備(Nook Simple Touch),以便顯示新下載的圖像。Android解鎖屏幕,然後重新鎖定屏幕(Nook簡單觸摸)

當它應該和圖像下載時(我可以通過Android Studio logcat看到),警報會熄滅。問題是角落沒有解鎖。 (屏幕不更新)。

這裏是AlarmReceiver.java

@Override 
public void onReceive(Context context, Intent intent) { 

    // Log to logcat 
    Log.i("AlarmReceiver", "onReceive() -- onReceive fired! "); 

    // Create the dummy image url 
    String currentDateTimeString = DateFormat.getDateTimeInstance().format(new Date()); 
    String imgPath = new String(); 
    imgPath = "http://dummyimage.com/600x800/fff/000.jpg&text=" + currentDateTimeString ; 
    imgPath = imgPath.replaceAll(" ", "+"); 

    // Download and save the image (works great) 
    new DownloadImageTask().execute(imgPath); 

    // Now how do I a) unlock the device, then b) put it back to sleep? 

} 

我的代碼,我試圖從How to programmatically dismiss the screensaver/lock screen on Android (Nook Simple Touch)

Window win = getWindow(); 
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 

getWindow()這個代碼是RED(無法解析法)。

我試過使用context.getWindow(),但也有錯誤。如何從onReceiver上下文訪問getWindow?

目標:通過

  1. 下載圖片(完成)
  2. 寫入圖像目錄(完成)
  3. 解鎖裝置
  4. 鎖定devive

刷新 '屏幕保護程序' 的形象謝謝!

+0

'AlarmReceiver'沒有這樣的方法,你需要實現活動並啓動它。 – gio 2014-12-27 20:14:21

回答

0

我不得不切換到使用一個活動作爲意圖,而不是接收器。

一旦我做到了,我把下面的代碼在警報活動:

KeyguardManager km = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); 
     final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock"); 
     kl.disableKeyguard(); 

     PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); 

     PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK 
       | PowerManager.ACQUIRE_CAUSES_WAKEUP 
       | PowerManager.ON_AFTER_RELEASE, "MyWakeLock"); 
     wakeLock.acquire(1000); 

上面的代碼解鎖角落! 請注意帶有標誌的getWindow()方法似乎不適用於角落觸摸。不知道爲什麼。