Запрет прокручивания строки состояния/уведомлений на пользовательском экране блокировки

Я разработал собственный экран блокировки, но я хочу, чтобы панель уведомлений/состояния не прокручивалась, если у моего приложения есть пароль безопасности.

Я обнаружил, что если я добавлю

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}

Я не могу прокручивать строку состояния, но мне нужно установить надежную блокировку системы. Итак, мой вопрос: могу ли я реализовать то же самое, но без необходимости активировать защитную блокировку системы?


person Rotary Heart    schedule 18.08.2013    source источник
comment
Сделайте это опцией, попросите пользователя установить пин-код/пароль экрана блокировки, чтобы включить его.   -  person ozbek    schedule 27.08.2013


Ответы (1)


  1. Этого невозможно добиться без включения того или иного типа (фейсконтроль, графический ключ, пин-код, пароль) блокировки экрана.

  2. Возможно на рутированных устройствах через отражение (независимо от того, включена блокировка экрана или нет). Ваше приложение должно иметь "android.permission. STATUS_BAR" уровень защиты "подпись|система". Это либо ваше приложение должно быть подписано ключом платформы, либо оно должно быть системным приложением.

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.disablestatusbar"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.STATUS_BAR" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.disablestatusbar.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Основная активность.java:

package com.example.disablestatusbar;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {

    private Object mStatusBarManager;
    private static final String STATUS_BAR_SERVICE = "statusbar";
    private static final int DISABLE_NONE = 0x00000000;
    private static final int STATUS_BAR_DISABLE_EXPAND = 0x00010000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mStatusBarManager = getSystemService(STATUS_BAR_SERVICE);
    }

    @Override
    protected void onResume() {
        super.onResume();
        disableStatusbarExpand(STATUS_BAR_DISABLE_EXPAND);
    }

    @Override
    protected void onPause() {
        super.onPause();
        disableStatusbarExpand(DISABLE_NONE);
    }

    private void disableStatusbarExpand(int what) {
        try {
            Method disable = mStatusBarManager.getClass().getMethod("disable", int.class);
            try {
                disable.invoke(mStatusBarManager, what);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Надеюсь это поможет.

person ozbek    schedule 27.08.2013
comment
Как сбросить (включить действие строки состояния) после этого? - person happy_coding; 25.02.2019
comment
@happy_Coding, что ты имеешь в виду под сбросом? - person ozbek; 26.02.2019