В режиме ожидания, как активность

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

Спасибо;)


person axl coder    schedule 05.12.2014    source источник
comment
Я не совсем уверен, что вы пытаетесь, но можно ли поместить ваше соединение в службу, которая удерживает блокировку пробуждения? Если вы что-то загружаете, отключите блокировку пробуждения, чтобы устройство могло полностью перейти в спящий режим. Если вы просто пытаетесь сохранить соединение открытым, это может быть довольно серьезным расходом заряда батареи.   -  person DeeV    schedule 05.12.2014
comment
Моя проблема в том, что мне нужно разбудить мое устройство (даже экран) с сообщением, полученным от моего соединения, поэтому я не могу потерять соединение (я не возражаю против проблемы с батареей, единственная потребность сна экрана - это спаси мою жизнь дисплея).   -  person axl coder    schedule 09.12.2014
comment
если вы держите PARTIAL_WAKE_LOCK, интернет-соединение не должно быть отключено.   -  person Goran Horia Mihail    schedule 09.12.2014
comment
Как я уже писал, я использую PARTIAL_WAKE_LOCK, это гарантирует только то, что ЦП не переходит в спящий режим, но мой интерфейс Ethernet отключен.   -  person axl coder    schedule 09.12.2014


Ответы (2)


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

Прежде всего, проблема может быть решена, если у вас есть подключение к Wi-Fi на устройстве и доступно подключение к Wi-Fi. В этом случае вы можете использовать WifiLock вместе с частичным WakeLock - см. этот вопрос.

Однако, если вам действительно нужно использовать соединение Ethernet, вы можете попробовать прослушивание намерения ACTION_SCREEN_OFF, а затем попытаться повторно включить подключение Ethernet, следуя инструкциям в лучший ответ на этот вопрос. Однако обратите внимание, что в этом случае ваше устройство может быть рутировано.

Надеюсь это поможет..

person Andrei Anischevici    schedule 13.12.2014
comment
Спасибо за ответ, к сожалению, я не могу использовать Wi-Fi. Даже второе решение, которое вы предлагаете, мне не подходит, потому что мне нужно подключение к сети, чтобы остаться в живых, а не падать, а затем снова подниматься :( - person axl coder; 15.12.2014

Я могу включить экран, дважды нажав кнопку питания (я не знаю, почему у меня есть два нажатия кнопки дважды, но это второстепенная проблема)

Это происходит потому, что технически экран все еще включен с нулевой яркостью, поэтому на самом деле происходит то, что вы выключаете экран первым нажатием кнопки питания, а затем включаете, это два щелчка.

Подозреваю, что соединение отключалось только после первого нажатия кнопки питания. Я не вижу, где в приведенном вами коде вы восстанавливаете яркость экрана.

Попробуйте установить для параметра screenBrightness значение 0,2 вместо нуля и отслеживать состояние подключения или использовать журнал. Также должно быть достаточно следующего кода.

Выключите экран "вроде"

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);
person Mostafa Gazar    schedule 14.12.2014
comment
К сожалению, это не то, что мне нужно. Таким образом, экран не выключается полностью. - person axl coder; 15.12.2014