2014-12-05 32 views
7

Vorrei creare un'attività di StandBy per il mio dispositivo, e finora ho creato un'attività che quando viene chiamata spegnerà il mio display.StandBy like activity

Il codice è il seguente:

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(); 


} 

}

Come ho detto questo codice mi permettono di spegnere lo schermo, e sono in grado di accendere lo schermo cliccando due volte il pulsante di accensione (Non so perché ho due volte il pulsante due volte, ma questo è un problema secondario).

Il problema principale è che quando il display spegne l'azione viene generato ACTION_SCREEN_OFF e, di conseguenza, l'EthernetService Android disabilita la mia connessione. Qualcuno sa come mantenere attiva la connessione?

Grazie;)

+0

Io non sono esattamente sicuro di cosa si sta cercando, ma sarebbe possibile mettere il vostro collegamento in un servizio che detiene il wake-lock? Se stai scaricando qualcosa, rilascia il blocco della sveglia in modo che il dispositivo possa dormire completamente. Se stai solo cercando di mantenere aperta una connessione, allora potrebbe essere una batteria piuttosto grave. – DeeV

+0

Il mio problema è che ho bisogno di riattivare il mio dispositivo (anche lo schermo) con un messaggio ricevuto dalla mia connessione, quindi non posso perdere la connessione (non mi interessa il problema della batteria, l'unica necessità di dormire lo schermo è per salvare la mia vita display). –

+0

se si trattiene un PARTIAL_WAKE_LOCK la connessione Internet non deve essere disabilitata. –

risposta

2

Dalla tua domanda vedo che è necessario per mantenere in vita il servizio Ethernet.

Prima di tutto, il problema potrebbe essere risolto se si disponesse della connettività WiFi sul dispositivo e di una connessione WiFi disponibile. In questo caso è possibile utilizzare WifiLock, insieme a un WakeLock parziale - see this question.

Se, tuttavia, è davvero necessario utilizzare la connessione Ethernet, è possibile provare listening for ACTION_SCREEN_OFF intent e quindi provare a riattivare la connettività Ethernet seguendo le istruzioni nello top reply to this question. Nota però che in questo caso potrebbe essere necessario il root del tuo dispositivo.

Spero che questo aiuti ..

+0

Grazie per la tua risposta, sfortunatamente non posso usare il Wifi. Anche la seconda soluzione che suggerisci non va bene per me, perché ho bisogno della connessione ethernet per rimanere viva, e non andare giù e poi di nuovo su :( –

2

Sono in grado di accendere lo schermo cliccando due volte il pulsante di accensione (non so il motivo per cui ho ho due clic due volte il tasto, ma questa è una secondaria problema)

Ciò accade perché tecnicamente lo schermo è ancora acceso con luminosità impostata su zero, quindi ciò che effettivamente accade è che si spegne lo schermo con il primo pulsante di accensione premere poi ON, cioè due clic.

Sospetto che la connessione sia stata disabilitata solo dopo la pressione del primo tasto di accensione. Non vedo dove nel codice che hai fornito ripristini la luminosità dello schermo.

Provare a impostare lo schermo per la luminosità su 0,2 anziché su zero e monitorare lo stato della connessione o utilizzare il registro. Anche il seguente codice dovrebbe essere sufficiente.

ruotare lo schermo "un pò" OFF

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

riattivare lo schermo ON

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

Purtroppo questo non è quello che mi serve. In questo modo lo schermo non completamente spento. –