Как создать настройки для включения и выключения keep_screen_ON - PullRequest
0 голосов
/ 06 августа 2020

Я изо всех сил пытался создать переключатель CheckBox для FLAG_KEEP_SCREEN_ON, который может включать / выключать отображение экрана. Мне удалось его создать, но он работает только для одного вида деятельности. Я хочу разместить кнопку, возможно, в MainActivity, где пользователю будет проще быстро решить, оставить ли экран включенным / выключенным. Я хочу, чтобы это был единственный переключатель управления всеми действиями в приложении. Любая помощь будет принята с благодарностью.

Это то, что я сделал, но не работает в качестве контрольных параметров во всех действиях.

Это XML

<RelativeLayout
       android:id="@+id/mainlayout"
        android:background="@drawable/layout_bg2"
        android:layout_width="match_parent"
        android:layout_height="30sp">



    <Switch
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="2dp"

       android:layout_marginLeft="50dp"
        android:id="@+id/ScreenController"/>

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Keeps Screen OFF"
        android:layout_centerHorizontal="true"
        android:background="@drawable/layout_bg2"
        android:layout_marginTop="2dp"
        android:layout_toRightOf="@id/ScreenController"
        android:layout_marginLeft="30dp"
        android:textSize="16sp"
        android:textStyle="bold"
        android:textColor="#000000"
        android:fontFamily="serif"
        android:id="@+id/StatusText"/>

    </RelativeLayout>

Это код Java

MySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                if(isChecked){

                    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                    String currentText = MySwitch.getText().toString();
                    MyText.setText(currentText.equals("Screen Light Stays ON") ? "Screen Light Stays OFF" : "Screen Light Stays ON");
                    MyText.setTextColor(Color.parseColor("#FFEB3B"));

                }else{

                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                    String currentText = MySwitch.getText().toString();
                    MyText.setText(currentText.equals("Screen Light Stays OFF") ? "Screen Light Stays ON" : "Screen Light Stays OFF");
                    MyText.setTextColor(Color.parseColor("#000000"));


                }
            }
        });

1 Ответ

1 голос
/ 06 августа 2020

сохраните вашу переменную в общем предпочтении, затем выполните действие, которое проверяет переменную и устанавливает флаг. затем вы просто расширите это действие на все свои действия.

 public class Main2Activity extends AppCompatActivity {
    String shared_prefs_name="MY_prefs_name";


     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if(screen_on()){

            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


        }else{

            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);



        }

    }
   public void set_screen_on( boolean screen_on) {


        SharedPreferences.Editor saver = getSharedPreferences(shared_prefs_name, MODE_PRIVATE).edit();

        saver.putBoolean("screen_on", screen_on);
        saver.commit();
        if(screen_on)
        {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        }else{

            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        }

    }

    public boolean screen_on() {



        SharedPreferences prefs = getSharedPreferences(shared_prefs_name, MODE_PRIVATE);
        return prefs.getBoolean("screen_on", false);


    }
}

Таким образом, вы можете использовать его в своей деятельности вот так.

public class Main3Activity extends Main2Activity {

    Switch MySwitch;
    TextView MyText;
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        MySwitch=(Switch)findViewById(R.id.ScreenController);
         MyText=(TextView) findViewById(R.id.StatusText);
        MySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                set_screen_on(isChecked);
                if(isChecked){


                    String currentText = MySwitch.getText().toString();
                    MyText.setText(currentText.equals("Screen Light Stays ON") ? "Screen Light Stays OFF" : "Screen Light Stays ON");
                    MyText.setTextColor(Color.parseColor("#FFEB3B"));

                }else{



                    String currentText = MySwitch.getText().toString();
                    MyText.setText(currentText.equals("Screen Light Stays OFF") ? "Screen Light Stays ON" : "Screen Light Stays OFF");
                    MyText.setTextColor(Color.parseColor("#000000"));


                }
            }
        });

        if(screen_on())
        {

            String currentText = MySwitch.getText().toString();
            MyText.setText(currentText.equals("Screen Light Stays ON") ? "Screen Light Stays OFF" : "Screen Light Stays ON");
            MyText.setTextColor(Color.parseColor("#FFEB3B"));
        }else{
            String currentText = MySwitch.getText().toString();
            MyText.setText(currentText.equals("Screen Light Stays OFF") ? "Screen Light Stays ON" : "Screen Light Stays OFF");
            MyText.setTextColor(Color.parseColor("#000000"));
        }

        }
    }

Главное - расширить Main2Activity, чтобы получить доступ в логическое значение screen_on() и установить с помощью set_screen_on(boolean);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...