Android 从服务调用startActivity不会';不允许关闭屏幕
各位用户好 我正在尝试使用以下代码打开此条件下的新活动Android 从服务调用startActivity不会';不允许关闭屏幕,android,android-activity,android-service,Android,Android Activity,Android Service,各位用户好 我正在尝试使用以下代码打开此条件下的新活动if(intent.getAction().equals(intent.ACTION\u SCREEN\u ON))(该服务具有广播接收器) 问题是,当新活动打开时,屏幕超时设置不再像以前那样工作,屏幕始终处于打开状态。活动中没有“保持屏幕打开”的标志。活动只有空的onCreate()方法。我想不出是什么问题。为什么屏幕超时(15秒)后屏幕不关闭?当我在没有此活动的情况下运行服务时,它会像往常一样禁用屏幕。对于Intent.ACTION\u
if(intent.getAction().equals(intent.ACTION\u SCREEN\u ON))
(该服务具有广播接收器)
问题是,当新活动打开时,屏幕超时设置不再像以前那样工作,屏幕始终处于打开状态。活动中没有“保持屏幕打开”的标志。活动只有空的onCreate()方法。我想不出是什么问题。为什么屏幕超时(15秒)后屏幕不关闭?当我在没有此活动的情况下运行服务时,它会像往常一样禁用屏幕。对于Intent.ACTION\u screen\u关闭和Intent.ACTION\u screen\u打开,您不能在Android清单中声明它们 可能是你犯了这个错误 检查此代码-
public class ScreenReceiver extends BroadcastReceiver {
public static boolean wasScreenOn = true;
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
// do whatever you need to do here
wasScreenOn = false;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// and do whatever you need to do here
wasScreenOn = true;
}
}
}
而在活动中—
public class ExampleActivity extends Activity {
private BroadcastReceiver mReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// initialize receiver
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
// your code
}
@Override
protected void onPause() {
// when the screen is about to turn off
if (ScreenReceiver.wasScreenOn) {
// this is the case when onPause() is called by the system due to a screen state change
Log.e("MYAPP", "SCREEN TURNED OFF");
} else {
// this is when onPause() is called when the screen state has not changed
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// only when screen turns on
if (!ScreenReceiver.wasScreenOn) {
// this is when onResume() is called due to a screen state change
Log.e("MYAPP", "SCREEN TURNED ON");
} else {
// this is when onResume() is called when the screen state has not changed
}
}
@Override
protected void onDestroy() {
if (mReceiver != null) {
unregisterReceiver(mReceiver);
mReceiver = null;
}
super.onDestroy();
}
}
也许这可以解决你的问题
干杯:)您正在检查哪一个android版本?android版本4.3(Galaxy S3和Nexus 4)除非您在其中一个视图的活动布局中执行其他操作,如持有电源锁或使用android:keepScreenOn=“true”,否则不应该这样做。没有任何类似于此android:keepScreenOn=“true”的属性。关于WakeLock,我甚至已经对这一部分进行了评论。但一旦它在KeyGuard(KeyGuard通过触摸屏禁用用户)后打开活动,超时时间就消失了。没有评论,释放唤醒锁也没有帮助。抱歉,我没有得到我不能声明的内容?这些是状态,只允许在活动运行时捕获它们。尝试从清单中删除它们,看看这是否对您有效。对不起,可能我写了一些不清楚的东西。在广播中捕获事件和事件的屏幕。您的答案告诉如何为该事件注册服务。就我而言,它是有效的。当服务运行后,我不会打开新的活动,屏幕超时工作正常。但一旦我从服务中启动触觉,它就不再工作了。
public class ExampleActivity extends Activity {
private BroadcastReceiver mReceiver = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// initialize receiver
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
// your code
}
@Override
protected void onPause() {
// when the screen is about to turn off
if (ScreenReceiver.wasScreenOn) {
// this is the case when onPause() is called by the system due to a screen state change
Log.e("MYAPP", "SCREEN TURNED OFF");
} else {
// this is when onPause() is called when the screen state has not changed
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// only when screen turns on
if (!ScreenReceiver.wasScreenOn) {
// this is when onResume() is called due to a screen state change
Log.e("MYAPP", "SCREEN TURNED ON");
} else {
// this is when onResume() is called when the screen state has not changed
}
}
@Override
protected void onDestroy() {
if (mReceiver != null) {
unregisterReceiver(mReceiver);
mReceiver = null;
}
super.onDestroy();
}
}