Eli*_*zer 7 android android-screen android-windowmanager android-activity
我有一个BroadcastReceiver开始Activity.如果在Activity屏幕打开时启动,则显示并且一切正常.但是,在ICS和JB设备上(我没有测试GB或HC,但Froyo不存在问题)如果Activity在屏幕关闭时启动,则锁定屏幕不会被禁用,并且当活动未显示时手机解锁(通过手动解锁或使用我为后Froyo设备输入的代码).
为什么,至少在ICS和JB设备上,如果没有下面提到的代码,锁屏就不会被禁用,为什么活动显示屏幕Activity在启动时屏幕是否关闭?
这是代码:
在BroadcastReceiver:
Intent alarmAlert = new Intent(context, AlarmGoneOffActivity.class);
alarmAlert.putExtra(MyAlarmManager.ALARM_NUM_ID, alarm.ID);
alarmAlert.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_NO_USER_ACTION);
context.startActivity(alarmAlert);
Run Code Online (Sandbox Code Playgroud)
在AlarmGoneOffActivity.onCreate():
setContentView(R.layout.alarm_gone_off);
final Window win = getWindow();
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
//so far all of my post froyo devices (ICS and JB no more GB)
// don't bypass the lockscreen unless we use this
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
KeyguardManager myKeyGuard =
(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock myLock = myKeyGuard.newKeyguardLock("ShabbosAlarm");
myLock.disableKeyguard();
}
Run Code Online (Sandbox Code Playgroud)
编辑:我真的不想使用,KeyguardLock.disableKeyguard()因为它会导致键盘锁被禁用,直到KeyguardLock.reenableKeyguard()不方便为止.有解决方案吗
编辑2:我现在可以确认该问题仅存在于ICS及以上.有什么改变可以防止键盘被禁用吗?即使有,为什么Activity在手动解锁屏幕时我没有显示?
这是我用来实现此目的的基本实现。它适用于我的 2.3-4.3 版本的用户。我确信您可以从这里开始构建。我创建了这个非常短暂的活动,只是为了处理这个事件 - 如果需要,您可以将它用作辅助类:
import android.app.Activity;
import android.os.Bundle;
import android.view.WindowManager;
public class BlankActivity extends Activity {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// Your code here - Or if it doesn't trigger, see below
}
@Override
public void onAttachedToWindow() {
// You may need to execute your code here
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
}
}
@Override
public void onPause() {
super.onPause();
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
在清单中:
<activity
android:name="com.your.package.BlankActivity"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
android:noHistory="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" >
</activity>
Run Code Online (Sandbox Code Playgroud)
与其他相关帖子相反,半透明主题没有引起问题,也不需要将布局添加到活动中。
希望它也适合你。
| 归档时间: |
|
| 查看次数: |
2706 次 |
| 最近记录: |