Активность Android на экране блокировки по умолчанию - PullRequest
69 голосов
/ 02 сентября 2010

Как я могу отобразить Activity или Dialog, чтобы быть видимым на экране блокировки?

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

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

и другие вместе с разрешениями SYSTEM_ALERT_WINDOW и INTERNAL_SYSTEM_WINDOW.

Моя деятельностьотображается после разблокировки устройства.

ОБНОВЛЕНИЕ:

Мне фактически уже удалось отобразить свою собственную активность вместо экрана блокировки по умолчанию.Он отлично работает, если вы не используете кнопку HOME.

Ответы [ 4 ]

117 голосов
/ 20 апреля 2011
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 likeв примере ...

31 голосов
/ 31 декабря 2014

Не занимайтесь деятельностью, потому что 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" /> к манифесту

19 голосов
/ 14 июля 2013

Используйте это в методе 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(......);

Надеюсь, это сработает Спасибо

0 голосов
/ 15 января 2016

Вы можете использовать код в любом из ответов, который, по вашему мнению, работает.Затем, чтобы кнопка 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...