2012年10月29日月曜日

Androidで設定を参照, 操作するあれこれ -画面の輝度編-

忙しかった…余計な仕事は背負い込むもんじゃないね('A`)


だいぶ間が開いてしまったけど
久々にAndroidさんに怒られたので書いてみる.


画面の輝度の操作


簡単に言ってしまえば「画面の明るさ変えるよ(゚∀゚)」ってだけなこと.
一昔前にこれ利用したライトアプリなんかあったとか無かったとか.

いつもどおりAndroidさんの設定に手を加えるべく.お邪魔するのは

import android.provider.Settings.System;

Androidの設定は基本ここにお願いなことはいい加減わかってきた.

1. 設定の変更


値が入っているのは

System.SCREEN_BRIGHTNESS

今回はここ.
ここの値をputしてやれば良いのだが値に注意.

まず値は
0 ~ 255
であり, また機種によっては
0 = ブラックアウト
と認識して何も見えなくなってしまうらしい点.
なので値は
1 ~ 255
にしておくといろいろ安心.

また0% ~ 100% で表記したいなら自分で計算してやるよろし.
というわけで


System.putInt(ContentResolver, System.SCREEN_BRIGHTNESS, "値");

当然値はint型でok.

2. 画面の明るさの変更


お前1. でやったじゃん と言う無かれ.
1. はあくまで 設定の変更 だけで, すぐにその設定が反映されるかといえば答えはNO.
なのですぐに反映してやりたいとき, また1. を利用する際, デモンストレーション的に明るさを変えたいときにはこちら.

ただしここで怒られた.
実は1. も2. もAsyncTask使ってUIスレッドの裏で処理をさせようとしたところ

おまUIスレッド以外からUIイジってんじゃねーよ ゴルァ!!щ(・Д・´#щ) =3

と怒られましてorz
1. はともかくこれからいじる2. に関してはUIスレッド上でやりましょう, ってお話.

ひとまずソース

LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.screenBrightness = "値";
getWindow().setAttributes(layoutParams);

やってることは割りと単純.
1行目で現在の画面の情報を取得.
2行目でその情報のうち 画面の輝度 に好きな値を投入(ただしfloat型かつ0.0 ~ 1.0の間という統一感の無さ)
3行目で反映…のはずなんだけど…なぜか無くても変わる!不思議!

…なんでだろ(・ω・`)

まぁとりあえずそのActivityくらいしか明るさは保たないので一時的なしのぎにでも.
最初に述べたライトアプリなんかにはむしろ都合が良いとか何とか.



まただらだらと書いてしまった…('A`)



0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...