2012-11-02 34 views
0

我需要強制android設備在應用程序運行時保持活動狀態。有沒有辦法做到這一點? 我在這裏讀到:Is there a way to force an android device to stay awake?關於這一點,我試圖做到這一點,但可能我不知道使用正確的服務。如何強制Android設備在應用程序運行時保持活動狀態

這是我的代碼使用方法:

public class WakeLockService extends Service { 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
public void onCreate() { 
    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); 
    wl.acquire(); 
} 
@Override 
public void onDestroy() { 
    wl.release(); 
} 

,並在我的應用程序的第一個活動,我把這個:

Intent s = new Intent(this, WakeLockService.class); 
startService(s); 

對不對我在做什麼?任何人都可以幫助我做到這一點? 在此先感謝。

+0

請定義「應用程序正在運行」。你是指當一個特定的活動在前臺?你爲什麼創建一個服務只是爲了擁有一個'WakeLock'? – CommonsWare

+0

這就是我在SO上找到的。我不知道讓Android設備保持活力的另一種方式。你可以幫我嗎 ? – Gabrielle

+0

**請定義「應用程序正在運行」**。除非你能清楚地解釋「申請正在運行」的含義,否則我們不能給你任何可靠的建議。 – CommonsWare

回答

3

如果您希望設備保持清醒,同時它會顯示你的應用程序的活動,你必須創建活動時,設置標誌FLAG_KEEP_SCREEN_ON:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); // Unlock the device if locked 
    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); // Turn screen on if off 
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // Keep screen on 
    ..... 
} 

添加權限WAKE_LOCK在清單:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

編輯在看到您的最後一條評論之後:是的,您需要一項服務:請注意,設備無論如何都會進入休眠狀態,但您的服務可以繼續運行,只要您向用戶明確指出通知)並聲明它爲STICKY:

public class yourservice extends Service 
{ 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     //The intent to launch when the user clicks the expanded notification 
     ///////////////////////////////////////////////////////////////////// 
     Intent forPendingIntent = new Intent(this, si.test.app.activities.activity.class); 
     forPendingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     PendingIntent pendIntent = PendingIntent.getActivity(this, 0, forPendingIntent, 0); 

     Notification notification = new Notification(R.drawable.icon, "testapp", System.currentTimeMillis()); 
     notification.setLatestEventInfo(this, "testApp", "testApp is running", pendIntent); 

     notification.flags |= Notification.FLAG_NO_CLEAR; 
     startForeground (R.string.app_name, notification); 
     return START_STICKY; 
    } 
    ... 
} 
2

在我的申請我已經,例如,一同步化服務器 - >移動,該同步化可以運行更多然後5分鐘。我想強制設備不進入待機狀態,查看同步過程何時完成

同步操作應該由某些Android組件(例如服務)管理。該組件可以管理一個WakeLock。不要單獨爲WakeLock創建一個單獨的組件,因爲其他組件與您的同步工作沒有任何關係。

例如,如果通過IntentService進行同步,則可以使用my WakefulIntentService在執行onHandleIntent()中的工作時使設備保持喚醒狀態。

相關問題