Как вызвать информацию из radiobutton в отдельном действии в Android Studio

#java #android #radio-button

#java #Android #переключатель

Вопрос:

В моем приложении при запуске приложения воспроизводится музыка. Если пользователь переходит в настройки, он может изменять громкость или включать и выключать музыку, однако я не знаю, как вызвать информацию с переключателей, чтобы включить или выключить музыку в других действиях. Я знаю, что если я выключу музыку в основном действии в разделе onCreate, он будет прослушивать переключатели, но я хочу, чтобы музыка играла при запуске приложения, и когда вы возобновляете действие, оно вводит информацию с переключателей. кнопки.

Это код моей основной деятельности

 
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;


import android.content.Intent;

import android.os.Bundle;

import android.view.View;




public class MainActivity extends AppCompatActivity {




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            Intent svc = new Intent(this, music.class
            );
            startService(svc);

        }

        public void onPlayPressed(View view) {

            Intent myIntent = new Intent(getBaseContext(), Game.class);
            startActivity(myIntent);

        }

        public void onSettingsPressed(View view) {

            Intent myIntent = new Intent(getBaseContext(), Settings.class);
            startActivity(myIntent);

        }

        public void onHowtoPressed(View view) {

            Intent myIntent = new Intent(getBaseContext(), HowtoPlay.class);
            startActivity(myIntent);

        }

        @Override
        public void onResume() {

            super.onResume();

            
        }



        @Override
        public void onDestroy() {


            super.onDestroy();
            Intent svc = new Intent(this, music.class);
            stopService(svc);


        }
    }

 

и это код моей операции настройки

 
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.Toast;

public class Settings extends AppCompatActivity {


    private RadioGroup radioGroup;



        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
            final Intent svc = new Intent(this, music.class
            );


            RadioButton rdb = (RadioButton) findViewById(R.id.on);
            rdb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = ((RadioButton) v).isChecked();
                    // Check which radiobutton was pressed
                    if (checked){
                        startService(svc);

                    }
                    else{
                        stopService(svc);
                    }
                }
            });
            RadioButton rdb2 = (RadioButton) findViewById(R.id.off);
            rdb2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = ((RadioButton) v).isChecked();
                    // Check which radiobutton was pressed
                    if (checked){
                        stopService(svc);

                    }
                    else{
                        startService(svc);
                    }
                }
            });
            final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        SeekBar volControl = (SeekBar)findViewById(R.id.seekBar);
        volControl.setMax(maxVolume);
        volControl.setProgress(curVolume);
        volControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar arg0) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar arg0) {
            }

            @Override
            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
                audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, arg1, 0);
            }
        });



    }

        public void onMainMenuPressed(View view){

        Intent myIntent=new Intent(getBaseContext(),MainActivity.class);
        startActivity(myIntent);
    }

        public void onResumePressed (View view){

        Intent myIntent=new Intent(getBaseContext(),Game.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(myIntent);
        finish();
    }
    } ```
 

Ответ №1:

Используйте SharedPreferences с простым логическим флагом.

Вы должны использовать OnCheckedChangeListener для группы радио, а не OnClickListener для отдельной кнопки переключателя, например:

 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(...) {
        getSharedPreferences("prefs", 0).edit().putBoolean("music", rdb.isChecked()).apply();
    }
});
 

Затем внутри другого действия:

 boolean music = getSharedPreferences("prefs", 0).getBoolean("music", true);
 

Затем проверьте значение флага, чтобы определить, запускать или нет музыкальный сервис.

Комментарии:

1. Спасибо за ответ! Но у меня возникли проблемы с получением этой работы. Во-первых, Android Studio хочет, чтобы я реализовывал методы, когда я вставляю OnCheckedChangeListener, и что должно идти туда, где находятся многоточия?

2. Единственный метод, который вам нужно реализовать, — это onCheckedChanged() . Вам нужны два параметра, в которых есть многоточия, один типа RadioGroup и один типа int , как описано здесь . Я забыл включить эту информацию, потому что Android Studio может автоматически завершить реализацию метода для вас, если вы начнете вводить new RadioGroup.OnCheckedChangeListener() текст в круглых скобках setOnCheckedChangeListener() метода.

3. Понятно, спасибо! Как мне тогда проверить значение флага?

4. Точно так же, как вы сделали в своем методе onClick(): if (music) { startService(svc); } . Очевидно, что вам также потребуется svc определить переменную в другом действии.