2

光に合わせて画面の明るさを変えたい。

明るさのレベルを取得し、明るさを設定するためのリンクを見つけました。

画面の明るさを変更するonPause(Androidアプリ)

自動明るさのオンとオフを切り替える方法は?(繰り返しではありません)

Androidでプログラムによって画面の明るさを変更する

プログラムで画面の明るさを変更する(パワーウィジェットの場合と同様)

でも周囲の光に合わせて明るさを変えたい…要するにオートブライトネスと同じようにやりたい…。

どうすれば周囲の光を検出できますか?または自動輝度機能をトリガーできますか?

明るさの値の範囲は0〜255です。0〜255にできない周囲の光のレベルに応じて明るさのレベルを設定したいと思います。この2つの比率を取得するにはどうすればよいですか。

ヘルプが必要です。ありがとう

4

1 に答える 1

6

私自身からの解決策:

ここからシェイクリスナーを実装しました。私はそれを完成させるためにもaboceリンクを使用しました。

ShakeBrightService.javaを作成しました

public class ShakeBrightService extends Service {

private ShakeDetector shakeBrightDetector = new ShakeDetector();

@Override
public void onCreate() {
    super.onCreate();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    shakeBrightDetector.stop();
    shakeBrightDetector.start(this, shakeBrightEventListener);

    return super.onStartCommand(intent, flags, startId);
}

private ShakeEventListener shakeBrightEventListener = new ShakeEventListener() {

    @Override
    public void onShake() {
        setAutoBrightness(true);
    }
};

@Override
public IBinder onBind(Intent intent) {
    return null;
}

private void setAutoBrightness(boolean value) {

    Toast.makeText(getApplicationContext(), "AutoBrightness : " + value,
            Toast.LENGTH_SHORT).show();

    if (value) {

        Settings.System.putInt(getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
    } else {

        Settings.System.putInt(getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
    }

    Intent i = new Intent(getApplicationContext(), MainActivity1.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(i);   
}

}

ビュー
MainActivity1.javaを更新するための偽物

public class MainActivity1 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main1);

    refreshBrightness(getBrightnessLevel());

    Thread t = new Thread() {
        public void run() {
            try {
                sleep(10);
            } catch (InterruptedException e) {
            }
            finish();
        }
    };
    t.start();
}

private void refreshBrightness(float brightness) {

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    if (brightness < 0) {
        lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
    } else {
        lp.screenBrightness = brightness;
    }
    getWindow().setAttributes(lp);
}

int getBrightnessLevel() {
    try {
        int value = Settings.System.getInt(getContentResolver(),
                Settings.System.SCREEN_BRIGHTNESS);
        // convert brightness level to range 0..1
        value = value / 255;
        return value;
    } catch (SettingNotFoundException e) {
        return 0;
    }
}

FakeActivityにはテーマandroid:theme="@android:style/Theme.Translucent.NoTitleBar"があるので、静かに明るさが変わります。

于 2013-01-01T14:11:56.667 に答える