android - samsung - Filtro de pantalla de brillo
modo nocturno samsung (4)
Simplemente realice una actividad transparente a pantalla completa que permita el paso de los toques. Para hacer que los toques pasen, utilice los siguientes indicadores de Ventana antes de configurar 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);
}
Para su archivo de diseño main.xml solo use una pantalla completa LinearLayout con un fondo transparente:
<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>
Luego, para ajustar el "brillo" simplemente cambie el valor del color de fondo de su código en alguna parte:
findViewById(R.id.background).setBackgroundColor(0x66000000);
¿Alguien tiene una idea de cómo implementar un filtro de pantalla de brillo como el que se muestra aquí?
http://www.appbrain.com/app/screen-filter/com.haxor
Necesito un punto de partida y no puedo encontrar la manera de hacerlo.
Usted puede intentar esto también:
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);
}
Obtenga una instancia de WindowManager.
WindowManager windowManager = (WindowManager) Class.forName("android.view.WindowManagerImpl").getMethod("getDefault", new Class[0]).invoke(null, new Object[0]);
Cree un xml de diseño de pantalla completa (los parámetros de diseño se establecen en
fill_parent
)Establezca su vista como no seleccionable, no se puede enfocar, no se puede hacer clic mucho, etc. para que el toque se transfiera a su aplicación y la aplicación pueda detectarla.
view.setFocusable(false);
view.setClickable(false);
view.setKeepScreenOn(false);
view.setLongClickable(false);
view.setFocusableInTouchMode(false);Cree un parámetro de diseño de tipo
android.view.WindowManager.LayoutParams
.LayoutParams layoutParams = new LayoutParams();
Establecer parámetros de diseño como altura, ancho, etc.
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;
Paso clave: puede establecer qué porcentaje de brillo necesita.
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));}
Finalmente, agregue view a windowManager que creó anteriormente.
windowManager.addView(view, layoutParams);
Nota: Necesita el permiso SYSTEM_ALERT_WINDOW
para colocar una superposición en la pantalla.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Han probado esto y funciona. Avísame si te quedas atascado.
Por supuesto que no puedes usar este código de producción, pero si estás jugando ... prueba este truco no documentado
Usa :
private void setBrightness(int brightness) {
try {
IHardwareService hardware = IHardwareService.Stub.asInterface(
ServiceManager.getService("hardware"));
if (hardware != null) {
hardware.setScreenBacklight(brightness);
}
} catch (RemoteException doe) {
}
}
Recuerde que usa este permiso:
<uses-permission android:name="android.permission.HARDWARE_TEST"/>