2014-12-05 5 views
7

Я хотел бы создать операцию StandBy для своего устройства, и до сих пор я создал действие, которое при вызове отключит мой дисплей.StandBy like activity

Код следующее:

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 генерируется, и, как следствие, андроид EthernetService отключает мое соединение. Кто-нибудь знает, как сохранить соединение активным?

Спасибо;)

+0

Я не совсем уверен, что вы пытаетесь, но это было бы возможно поставить подключение в Службе, которая держит замок бодрствования? Если вы что-то загружаете, отбросьте блокировку слежения, чтобы устройство могло полностью заснуть. Если вы просто пытаетесь сохранить соединение открытым, это может быть довольно серьезная батарея. – DeeV

+0

Моя проблема в том, что мне нужно просыпаться на своем устройстве (даже на экране) с сообщением, полученным от моего подключения, поэтому я не могу потерять соединение (я не против проблемы с батареей, чтобы сохранить мой экран). –

+0

, если вы удерживаете PARTIAL_WAKE_LOCK, подключение к Интернету не должно быть отключено. –

ответ

2

Из Вашего вопроса я вижу, что вам нужно держать службу Ethernet жив.

Прежде всего, проблема может быть решена, если у вас есть WiFi-соединение на устройстве и доступно WiFi-соединение. В этом случае вы можете использовать WifiLock вместе с Partial WakeLock - see this question.

Если вам действительно нужно использовать Ethernet-соединение, вы можете попробовать listening for ACTION_SCREEN_OFF intent, а затем попытаться снова включить подключение Ethernet, выполнив инструкции в top reply to this question. Обратите внимание, что в этом случае ваше устройство, возможно, придется внедрять.

Надеется, что это помогает ..

+0

Спасибо за ваш ответ, к сожалению, я не могу использовать Wi-Fi. Даже второе решение, которое вы предлагаете, не подходит для меня, потому что мне нужно подключение к сети Ethernet, чтобы остаться в живых, и не спускаться, а затем снова :( –

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

Поверните экран обратно на

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

К сожалению, это не то, что мне нужно. полностью отключиться. –