Активность Android по блокировке блокировки по умолчанию
Как я могу отображать Activity
или Dialog
для просмотра на экране блокировки?
Я уже пытался отображать активность блокировки при включении экрана, установив для каждого типа окна метод Activity.onCreate()
:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
и другие вместе с разрешениями SYSTEM_ALERT_WINDOW
и INTERNAL_SYSTEM_WINDOW
.
Моя активность видна после разблокировки устройства.
UPDATE:
На самом деле мне уже удалось отобразить собственное действие, а не экран блокировки по умолчанию. Он отлично работает, если вы не используете кнопку HOME.
Ответы
Ответ 1
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
попробуйте использовать эти флаги, чтобы отключить экран блокировки при запуске активности.
После уровня API 17 вы можете использовать
<activity
android:name=".yourActivityName"
android:showOnLockScreen="true"
android:screenOrientation="sensorPortrait" >
showOnLockScreen, как в примере...
Ответ 2
Не заходите на активность, потому что Android не будет показывать экран блокировки за вашей деятельностью по соображениям безопасности, поэтому используйте службу вместо Activity.
Ниже мой код в onStartCommand моей службы.
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
И добавьте <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
для отображения
Ответ 3
Используйте это в методе onCreate
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// This line should be before setContentView..
setContentView(......);
Надеюсь, что это сработает
Благодаря
Ответ 4
Здесь вы можете использовать код в любом из ответов, который, по вашему мнению, работает. Затем, чтобы кнопка HOME не работала, измените TYPE_SYSTEM_ALERT
или TYPE_SYSTEM_OVERLAY
(в зависимости от того, что вы используете в данный момент) на TYPE_SYSTEM_ERROR
:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);