こんにちは私はウェブとSOですべてのソリューションを試しましたが、何も機能しません。トリガーをクリックすると全画面表示されるオーバーレイ(サービス)があります。オーバーレイには、ショートカット、ボリュームコントロール、明るさコントロールをいくつか配置しました。重要なのは、私が何をしても、明るさがすぐに画面を変更するわけではないということです(画面のオンとオフを切り替える必要があります)。
これは、明るさスライダーが更新されたときに私が呼ぶものです。
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
int value = (int)(arg1*255.0/100);
int V=-1;
try {
V=android.provider.Settings.System.getInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("V="+V+"brightness="+value);
//android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, value);
android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
// Intent intent= new Intent(getContext(), Bright.class);
// Bundle b=new Bundle();
// b.putFloat("lvl", (float)(arg1*0.01));
// intent.putExtras(b);
// //intent.putExtra("lvl", (float)(arg1*0.01));
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// getContext().startActivity(intent);
}
});
これは、画面のオンとオフを切り替えた場合に機能しますが、それ以外の場合は機能しません。このクラスはサービスであるため(getWindow()は使用できません)、コードを呼び出す偽のアクティビティを生成するトリックも試しました(Webにもあります)。
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness=0.9f;
getWindow().setAttributes(lp);
残念ながら、私の場合、上記の解決策はまったく機能していないようです。WindowManagerは何もしないようです。おそらくそれが私のアプリの実装方法です(「クラシック」ウィンドウではなくシステムオーバーレイ)
とにかく、突然、[設定]> [明るさ]ウィンドウをバックグラウンドで開いたままにすると、スライダーが機能し始めたことに気づきました。そうすれば、スライダーは2本の線を設定するだけで、システムの明るさを直接制御できます。
android.provider.Settings.System.putInt(getContext()。getContentResolver()、android.provider.Settings.System.SCREEN_BRIGHTNESS、value); android.provider.Settings.System.putInt(getContext()。getContentResolver()、android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE、android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
つまり、バックグラウンドで「何らかのプロセス」が発生している場合、明るさの調整は非常に簡単です(必要です!)。誰かが私が同じ効果を得る方法を理解しようとするのを手伝ってもらえますか?コマンドラインを使用して明るさウィンドウを起動するだけでも問題ありませんが(方法を知っていれば)、もっと微妙な解決策が必要なのは明らかです。
ご意見をお聞かせください。
乾杯
エマヌエーレ