web-dev-qa-db-ja.com

プログラムで画面の明るさを変更する(電源ウィジェットと同様)

プログラムで画面の明るさを変更する方法を探していましたが、 this それは非常に良い解決策であり、うまく機能しますが、アプリがアクティブな間のみ機能します。アプリケーションをシャットダウンした後、明るさはアプリを起動する前と同じ値に戻ります。

電源ウィジェットから輝度ボタンを押したときと同じように、輝度を変更できるようにしたい。 Androidの3つの状態があります。1つは非常に明るい状態、1つは非常に暗い状態、1つは状態です。誰かがこのウィジェットを押したときのように明るさを変更することは可能ですか?

enter image description here

編集1:これを作成し、マニフェストに許可を追加しましたが、アプリを起動したときに明るさの変更が表示されない場合、100で10を使用し、現在は200で変更を試みましたが、提案はありませんか?

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Android.provider.Settings.System.putInt(this.getContentResolver(),
        Android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);
}
29
Lukap

これは私が働いていることがわかった完全なコードです:

_Settings.System.putInt(this.getContentResolver(),
        Settings.System.SCREEN_BRIGHTNESS, 20);

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness =0.2f;// 100 / 100.0f;
getWindow().setAttributes(lp);

startActivity(new Intent(this,RefreshScreen.class));
_

画面が更新されないため、私の質問のコードは機能しません。そのため、画面を更新するハックの1つはダミーアクティビティを開始し、そのダミーアクティビティを作成してfinish()を呼び出して輝度の変更を有効にします。

40
Lukap

そのリンクでTor-Mortenのソリューションを使用しますが、システムの輝度設定も次のように設定します。

Android.provider.Settings.System.putInt(getContext().getContentResolver(),
Android.provider.Settings.System.SCREEN_BRIGHTNESS, bright);

ここで、brightは1〜255の範囲の整数です。

13
Glitch

今日、この問題を解決しました。

最初に、AndroidManifest.xmlファイルに許可を設定する必要があります。

<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />

ファイル内の正確な場所はどこですか?

<manifest>
    <uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
    <application>
        <activity />
    </application>
</manifest>

この許可は、他のアプリケーションにも影響する設定を変更できることを示しています。

明るさ自動モードのオンとオフを設定できるようになりました

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);  //this will set the automatic mode on
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);  //this will set the manual mode (set the automatic mode off)

現在、自動モードはオンまたはオフになっていますか?あなたは情報を得ることができます

int mode = -1;
try {
    mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1)
} catch (Exception e) {}

したがって、手動で明るさを変更する場合は、最初に手動モードを設定し、その後、明るさを変更することができます。

注:SCREEN_BRIGHTNESS_MODE_AUTOMATICは1です

注:SCREEN_BRIGHTNESS_MODE_MANUALは0です

これを使うべきです

if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
    //Automatic mode
} else {
    //Manual mode
}

これの代わりに

if (mode == 1) {
    //Automatic mode
} else {
    //Manual mode
}

明るさを手動で変更できるようになりました

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);  //brightness is an integer variable (0-255), but dont use 0

明るさを読む

try {
    int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);  //returns integer value 0-255
} catch (Exception e) {}

これですべてが正しく設定されましたが、...まだ変更を確認できません。変化を見るにはもう1つ必要です!画面を更新してください...

    try {
        int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);  //this will get the information you have just set...

        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) br / 255; //...and put it here
        getWindow().setAttributes(lp);
    } catch (Exception e) {}

許可を忘れないでください...

<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
10
PEPAN

パラメータの設定中にアクティビティのコンテキストを渡すと、別のアクティビティを開始する必要なくジョブが完了します。次は私のために働いた-

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.screenBrightness =0.00001f;// i needed to dim the display
this.getWindow().setAttributes(lp);

onSensorChanged()メソッド内にこのコードがあり、トリガーされるたびにディスプレイを暗くしました。

7
Deepak Negi

複雑な例:

    try {
        //sets manual mode and brightnes 255
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);  //this will set the manual mode (set the automatic mode off)
        Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255);  //this will set the brightness to maximum (255)

        //refreshes the screen
        int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.screenBrightness = (float) br / 255;
        getWindow().setAttributes(lp);

    } catch (Exception e) {}
3
PEPAN