#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
определить переменную в другом действии.