Intereting Posts
Как открыть «переднюю камеру» на платформе Android? Программно введите секретный код, например * # * # 4636 # * # * на Android Пользовательский адаптер курсора, вызывающий bindView несколько раз Android-браузер по умолчанию не прокручивает веб-страницу Android AlertDialog setOnDismissListener для API ниже 17 Не удается найти API Google для Android SDK Панорамная карта google в CoordinatorLayout заставляет recyclerview прокручиваться в библиотеке поддержки дизайна Android 23.0.1 NullPointerException в TextView.checkForRelayout (), в то время как setText () Войдите в систему через веб-службу Restore через android, не используя Преобразование YUV в RGB и отображение с использованием opengl es 2.0 из android ndk с использованием шейдеров Как получить черновик SMS в Android 6 Marshmallow Сохранение содержимого EditText в RecyclerView Использование Android AccountManager для аутентификации пользователей для сервера Определите, является ли контекст конкретным действием Смена громкости?

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

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

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); }