Как показать какую-то раскладку на верхней части экрана блокировки Android

Я хочу создать приложение, где некоторая информация будет видна пользователю на экране блокировки. Я искал в интернете. Я обнаружил, что по соображениям безопасности Android не позволяет макет активности в верхней части экрана блокировки. Как кто-то предложил, я попытался использовать сервисы и WindowManger. Ниже приведен код, который я получил в Интернете.

public class MyService extends Service {

WindowManager mWindowManager;
View mView;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    registerOverlayReceiver();
    return super.onStartCommand(intent, flags, startId);
}

private void showDialog(){
    WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    View mView = View.inflate(getApplicationContext(),R.layout.activity_main, 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,
            PixelFormat.RGBA_8888);
    mView.setVisibility(View.VISIBLE);
    mWindowManager.addView(mView, mLayoutParams);

}

private void hideDialog(){
    if(mView != null && mWindowManager != null){
        mWindowManager.removeView(mView);
        mView = null;
    }
}

@Override
public void onDestroy() {
    unregisterOverlayReceiver();
    super.onDestroy();
}

private void registerOverlayReceiver() {
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_USER_PRESENT);
    registerReceiver(overlayReceiver, filter);
}

private void unregisterOverlayReceiver() {
    hideDialog();
    unregisterReceiver(overlayReceiver);
}


private BroadcastReceiver overlayReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(Intent.ACTION_SCREEN_ON)) {
            showDialog();
        }
        else if (action.equals(Intent.ACTION_USER_PRESENT)) {
            hideDialog();
        }
        else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
            hideDialog();
        }
    }
};

}

Я понимаю этот код. Но когда я попробовал этот код. Это не работает. Я дал разрешение

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

Кто-нибудь может мне помочь с этим?

0 ответов

Другие вопросы по тегам