eccoti servito :)
nota che devi installare sl4a (code.google.com/p/android-scripting) e in particolare python (trovi tutto nella sezione download).
Fatto questo ti salvi lo script che trovi qui sotto con estensione .py (per me è auto_bright.py) e lo copi nella cartella /storage/sdcard0/sl4a/scripts, quindi lo lanci con l'applicazione SL4A (eh, te l'ho detto che è una cosa da smanettoni :D)
se non ti piace la mia curva personalizzata di risposta alla luminosità puoi modificarla per ottenere ciò che preferisci (la linea è questa: custom_curve=[ (850, 8), (950, 32), (1050, 48), (1150, 80), (1250, 100), (1350, 120), (1450, 175), (6000, 200) ] dove il primo numero indica i lux rilevati dal sensore e il secondo numero indica la corrispondente luminosità dello schermo, che va da 8 minimo a 255 massimo).
Per sapere quanti lux vengono rilevati dal tuo telefono in una certa situazione di luminosità puoi usare My Android Sensor.
Spero ti sia utile/utilizzabile :) ciao!
codice:import android, time, os
alpha=0.15# smorzamento esponenziale della lettura del sensore
min_duration=8# l'inversione della direzione del cambio di luminosita' non puo' avvenire prima che siano passati due secondi
#max_time_without_update=10# la luminosita' va sistemata almeno una volta ogni tot secondi
os.system("su -c chmod 666 /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness")
def orario():
return "%.2d/%.2d/%.4d %.2d.%.2d.%.2d"%(time.localtime()[2],time.localtime()[1],time.localtime()[0],time.localtime()[3],time.localtime()[4],time.localtime()[5])
def TESTcustomSetBrightness(value):
cont=0
max_tentativi=10
while cont<max_tentativi:
cont+=1
f=open("/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness","w")
f.write(str(value))
f.close()
if droid.getScreenBrightness().result!=value:
time.sleep(0.1)
else:
return
if cont==max_tentativi:
print "Ho provato %d volte a impostare lo schermo a %d senza successo"%(cont,value)
def customSetBrightness(value):
f=open("/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness","w")
f.write(str(value))
f.close()
def selectLight(lux):
lux_min,light_min=custom_curve[0]
lux_max,light_max=custom_curve[-1]
if lux>=lux_max:
return light_max
elif lux<=lux_min:
return light_min
else:
for i in range(len(custom_curve)):
if lux>custom_curve[i][0]:
lux_min,light_min=custom_curve[i]
lux_max,light_max=custom_curve[i+1]
else:
break
#print lux_max, lux_min
luce=light_min+(light_max-light_min)*(float(lux)-lux_min)/(lux_max-lux_min)
return int(luce)
droid = android.Android()
droid.startSensingTimed(1, 250)
custom_curve=[ (850, 8), (950, 32), (1050, 48), (1150, 80), (1250, 100), (1350, 120), (1450, 175), (6000, 200) ]
custom_curve.sort()
light=0
cont=0
last_change=0
last_direction=0
last_bright=0
last_cicle=0
while 1:
cont+=1
#~ if cont%4==0:
#~ print time.asctime()
last_reading=droid.sensorsGetLight().result
if last_reading:
if light:
light=alpha*last_reading+(1-alpha)*light
else:
light=last_reading
else:
continue
if not droid.checkScreenOn().result:
time.sleep(1)
continue
#print "Light: %s"%light
bright=selectLight(light)
#si puo' cambiare luminosita' se:
# - o e' la prima lettura del sensore
# - o da un ciclo while all'altro sono passati piu' di 1.5 secondi (deep sleep quindi)
# - o sono passati almeno due secondi dal precedente cambio
# - o il cambio e' nella direzione (aumentativa o diminutiva) del cambio precedente
#if (not last_change) or (time.time()-last_cicle>=2) or (cont-last_change>=min_duration) or (bright-last_bright)*last_direction>0:
if (time.time()-last_cicle>=0.75) or (cont-last_change>=min_duration) or (bright-last_bright)*last_direction>0:
if bright!=last_bright or (time.time()-last_cicle>=0.75):
if (time.time()-last_cicle>=0.75):
time.sleep(1)# per qualche ragione dopo aver riacceso lo schermo il cambio immediato di luminosita' non ha effetto
customSetBrightness(bright)
#last_time_set=time.time()
print orario()+" Light: %s Bright: %s"%(light,bright)
if (time.time()-last_cicle>=2):
last_direction=0
elif bright>last_bright:
last_direction=1
else:
last_direction=-1
last_bright=bright
last_change=cont
last_cicle=time.time()
time.sleep(0.25)
#
# questo sotto per essere sicuri che la luminosita' sia quella desiderata
# in realta' mi sembra che sia troppo lento per vedere la luminosita' vera
#
#~ verifica_bright=droid.getScreenBrightness().result
#~ if verifica_bright!=last_bright:
#~ print "Luminosita' rilevata %d, impostata %d"%(verifica_bright,last_bright)
#~ last_bright=verifica_bright