2014-12-05 70 views
7

我想爲我的設備創建一個StandBy活動,到目前爲止我創建了一個活動,當被調用時會關閉我的顯示。Standby像活動

的代碼如下:

public class MainActivity extends Activity { 
private SensorManager mSensorManager; 
private PowerManager mPowerManager; 
private WindowManager mWindowManager; 
private WakeLock mWakeLock; 
private Button button; 
private TextView textView; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    try { 
     // Get an instance of the SensorManager 
     mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 

     // Get an instance of the PowerManager 
     mPowerManager = (PowerManager) getSystemService(POWER_SERVICE); 

     // Get an instance of the WindowManager 
     mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     mWindowManager.getDefaultDisplay(); 

     setContentView(R.layout.activity_main); 
     // textView = (TextView)findViewById(R.id.textView1); 
     button = (Button) findViewById(R.id.testText); 
     button.setOnClickListener(mButtonStopListener); 

     mWakeLock = mPowerManager.newWakeLock(
       PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); 
     // mWakeLock.acquire(); 
     final WindowManager.LayoutParams params = getWindow() 
       .getAttributes(); 
     params.screenBrightness = 0; 
     getWindow().setAttributes(params); 

    } catch (final Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.e("onCreate", e.getMessage()); 
    } 
} // END onCreate 

View.OnClickListener mButtonStopListener = new OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     try { 
      if (mWakeLock.isHeld()) { 
       mWakeLock.release(); 
       System.err.println("mWakeLock.release() onTouch"); 
      } 
     } catch (final Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.e("onPause", e.getMessage()); 
     } 

    } 
}; 

@Override 
protected void onResume() { 
    super.onResume(); 

    try { 
     if (mWakeLock.isHeld()) { 
      System.err.println("mWakeLock.release() onResume"); 
      mWakeLock.release(); 
     } else { 
      System.err.println("mWakeLock.acquire() onResume"); 
      mWakeLock.acquire(); 

     } 
    } catch (final Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.e("onResume", e.getMessage()); 
    } 

} 

@Override 
protected void onPause() { 
    super.onPause(); 


} 

}

正如我所說的這段代碼使我能夠關閉屏幕,我能夠把屏幕兩次單擊電源按鈕(我不知道爲什麼我有兩次點擊按鈕,但這是次要問題)。

主要問題是,當顯示器關閉動作ACTION_SCREEN_OFF生成,並因此android的以太網服務禁用我的連接。任何人都知道如何保持連接活動?

謝謝;)

+0

我不太確定你想要什麼,但它有可能把你的連接在一個持有喚醒鎖的服務中?如果你正在下載一些東西,那麼放下喚醒鎖,這樣設備就可以完全睡眠。如果你只是想保持連接打開,那麼它可能是一個非常嚴重的電池接收器。 – DeeV 2014-12-05 17:54:10

+0

我的問題是,我需要從我的連接中收到一條消息來喚醒我的設備(甚至屏幕),所以我不能斷開連接(我不介意關於電池問題,唯一需要屏幕休眠的是以節省我的顯示器壽命)。 – 2014-12-08 22:41:35

+0

如果您持有PARTIAL_WAKE_LOCK,則不應禁用互聯網連接。 – 2014-12-09 10:02:29

回答

2

從你的問題,我看到你需要保持以太網服務活着。

首先,如果您的設備上有WiFi連接並且有WiFi連接,則可以解決問題。在這種情況下,您可以使用WifiLock和部分WakeLock - see this question

但是,如果您確實需要使用以太網連接,則可以嘗試listening for ACTION_SCREEN_OFF intent,然後嘗試按照top reply to this question中的說明重新啓用以太網連接。請注意,在這種情況下,您的設備可能必須被植入。

希望這有助於..

+0

感謝您的回覆,很遺憾,我無法使用Wifi。即使是你建議的第二種解決方案對我來說也不是好事,因爲我需要以太網連接才能保持活力,而不是再次下降然後再重新啓動:( – 2014-12-15 10:11:03

2

我能打開屏幕兩次單擊電源按鈕(我不知道爲什麼我 有兩個兩次單擊按鈕,但這是次要的問題)

發生這種情況是因爲技術上屏幕仍亮着,亮度設置爲零,因此實際發生的情況是,您按下第一個電源按鈕然後打開屏幕,這是兩次點擊。

我懷疑連接僅在第一次按下電源按鈕後才被禁用。我沒有看到你提供的代碼在哪裏恢復了屏幕亮度。

嘗試將screenBrightness設置爲0.2而不是零,並監視連接狀態或使用日誌。以下代碼應該足夠了。

打開屏幕「還挺」 OFF

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
previousScreenBrightness = params.screenBrightness; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 

打開屏幕的背面ON

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.screenBrightness = previousScreenBrightness; 
getWindow().setAttributes(params); 
+0

)不幸的是,這不是我所需要的,通過這種方式屏幕沒有完全關閉。 – 2014-12-15 16:25:11