Intereting Posts
Как изменить объем устройства из строки поиска в андроиде У lambdas в компиляторе Android N есть ссылки на класс включения? Как получить значение ресурса в build.gradle? Фатальный сигнал 6 Код SIGABRT = -6 YouTubePlayerView перезагружает видео при изменении ориентации экрана Может ли кто-нибудь предоставить мне пример Two_line_list_item в Android? Правильно пропустите активность входа, если он уже вошел в систему Не найден ресурс, который соответствует указанному имени (в 'title' со значением '@ string / action_settings') Как добавить дни в дату в android Диалог подтверждения Android возвращает true или false Android – как получить или установить (распечатать) DPI (точек на дюйм) файла JPEG при загрузке или сохранении программно? Запуск действия ACTION_VIEW для открытия браузера, как мне вернуться в мое приложение? Вызовите режим профиля телефона Android в определенное время Как программно установить сертификат CA (для конфигурации EAP WiFi) в Android? Какова цель частных библиотек Android, справочных библиотек и Android Dependies в иерархии проектов Android?

Фильтр яркости экрана

Кто-нибудь есть идея, как реализовать фильтр яркости экрана, как здесь:

http://www.appbrain.com/app/screen-filter/com.haxor

Мне нужна начальная точка, и я не могу понять, как это сделать.

Solutions Collecting From Web of "Фильтр яркости экрана"

Просто сделайте прозрачную полноэкранную активность, которая позволяет касатьться. Чтобы сделать штрихи, используйте следующие флаги окна перед настройкой contentView:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); // Let touches go through to apps/activities underneath. window.addFlags(FLAG_NOT_TOUCHABLE); // Now set up content view setContentView(R.layout.main); } 

Для вашего файла макета main.xml просто используйте полноэкранный LinearLayout с прозрачным фоном:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/background" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#33000000"> </LinearLayout> 

Затем, чтобы настроить «яркость», просто измените значение цвета фона из вашего кода где-нибудь:

 findViewById(R.id.background).setBackgroundColor(0x66000000); 
  • Получите экземпляр WindowManager.

    WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);

  • Создайте полноэкранный макет xml (параметры макета, установленные на fill_parent )

  • Установите свое представление как не интерактивное, не настраиваемое, не долгое кликабельное и т. Д., Чтобы прикоснуться к вашему приложению, и приложение сможет его обнаружить.

    view.setFocusable(false);
    view.setClickable(false);
    view.setKeepScreenOn(false);
    view.setLongClickable(false);
    view.setFocusableInTouchMode(false);

  • Создайте параметр макета типа android.view.WindowManager.LayoutParams . LayoutParams layoutParams = new LayoutParams();

  • Задайте параметры макета, такие как высота, ширина и т. Д.

     layoutParams.height = LayoutParams.FILL_PARENT; layoutParams.width = LayoutParams.FILL_PARENT; layoutParams.flags = 280; // You can try LayoutParams.FLAG_FULLSCREEN too layoutParams.format = PixelFormat.TRANSLUCENT; // You can try different formats layoutParams.windowAnimations = android.R.style.Animation_Toast; // You can use only animations that the system to can access layoutParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY; layoutParams.gravity = Gravity.BOTTOM; layoutParams.x = 0; layoutParams.y = 0; layoutParams.verticalWeight = 1.0F; layoutParams.horizontalWeight = 1.0F; layoutParams.verticalMargin = 0.0F; layoutParams.horizontalMargin = 0.0F; 
  • Ключевой шаг: вы можете установить, какой процент яркости вам нужен. layoutParams.setBackgroundDrawable(getBackgroundDrawable(i));

     private Drawable getBackgroundDrawable(int i) { int j = 255 - (int) Math.round(255D * Math.exp(4D * ((double) i / 100D) - 4D)); return new ColorDrawable(Color.argb(j, 0, 0, 0));} 
  • Наконец добавьте представление windowManager, которое вы создали ранее.

    windowManager.addView(view, layoutParams);

Примечание. SYSTEM_ALERT_WINDOW доступа к наложению на экран требуется разрешение SYSTEM_ALERT_WINDOW .

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

Испытали это, и оно работает. Дайте мне знать, если вы застрянете.

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

Оно использует :

 private void setBrightness(int brightness) { try { IHardwareService hardware = IHardwareService.Stub.asInterface( ServiceManager.getService("hardware")); if (hardware != null) { hardware.setScreenBacklight(brightness); } } catch (RemoteException doe) { } } 

Помните, что он использует это разрешение:

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

Вы также попробуете это:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.max_bright); WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.screenBrightness = 100 / 100.0f; getWindow().setAttributes(lp); }