我想为我的设备创建一个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会禁用我的连接。任何人都知道如何保持连接活动?
感谢;)
答案 0 :(得分:2)
根据您的问题,我发现您需要保持以太网服务的活跃。
首先,如果您在设备上使用WiFi连接并提供WiFi连接,则可以解决此问题。在这种情况下,您可以使用WifiLock和部分唤醒锁 - see this question。
但是,如果您确实需要使用以太网连接,则可以尝试listening for ACTION_SCREEN_OFF intent,然后按照top reply to this question中的说明尝试重新启用以太网连接。但请注意,在这种情况下,您的设备可能必须植根。
希望这会有所帮助..
答案 1 :(得分:2)
我可以点击两次电源按钮打开屏幕(我不知道为什么我 有两次单击按钮两次,但这是次要问题)
发生这种情况是因为从技术上讲,屏幕仍处于开启状态,亮度设置为零,所以实际发生的情况是,按下第一个电源按钮然后按ON,关闭屏幕,即可点击两次。
我怀疑只有在按下第一个电源按钮后才会禁用连接。我没有看到您提供的代码中的哪个位置可以恢复屏幕亮度。
尝试将 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);