#android #android-studio #android-activity #singleton #android-music-player
Вопрос:
Первое Занятие
package com.example.birthdaywish;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void wishButton(View view) {
final EditText editText = findViewById(R.id.editTextTextPersonName);
String name = editText.getText().toString();
Intent intent = new Intent(this, screen2.class);
intent.putExtra("name", name);
startActivity(intent);
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.happy_birthday_song);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
}
}
Выше приведено мое первое занятие. В котором я воспроизводил музыку при нажатии кнопки, в то же время нажатие кнопки также откроет второе действие.
Второе Мероприятие
package com.example.birthdaywish;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import org.w3c.dom.Text;
public class screen2 extends AppCompatActivity {
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen2);
TextView enteredName = findViewById(R.id.textView2);
String name = getIntent().getStringExtra("name");
enteredName.setText("Happy Birthday " name);
}
public void displayMessage(View view) {
}
}
Теперь, когда нажата кнопка отображения сообщения, я хочу остановить музыку, которая воспроизводится в первом действии. Или я могу сделать это любым другим способом, например, создать общую функцию для музыкального проигрывателя, имеющую метод запуска и остановки, и я могу вызывать их всякий раз, когда захочу запустить или остановить музыку в любом действии?
Ответ №1:
Я вижу два варианта:
- Сделайте
MediaPlayer
статический объект. - Рассмотрите возможность внедрения единого деятельностного подхода. У вас будет два фрагмента и общий
ViewModel
доступ, к которым вы сможете получить доступMediaPlayer
.
Комментарии:
1. Сэр, я новичок, и это мой первый проект. Я начал изучать разработку Android, перейдя в проект. Итак, вы можете предоставить мне код?
Ответ №2:
Создайте класс Utils, в котором вы создадите глобальный метод воспроизведения и приостановки музыкального проигрывателя.
В этом классе Utils:
private static MediaPlayer mediaPlayer;
private static int seek_position;
public static void playMedia(Context context, int music) {
if (mediaPlayer.isPlaying() amp;amp; mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(context, music);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
}
Используйте этот метод всякий раз, когда вы хотите воспроизвести носитель таким образом:
Utils.playMedia(this, R.raw.happy_birthday_song);
Теперь, если вы хотите реализовать функции глобальной паузы, возобновления и остановки, используйте это (создайте эти методы в одном классе Utils).
public static void pauseMedia(Context context) {
if (mediaPlayer.isPlaying() amp;amp; mediaPlayer != null) {
seek_position = mediaPlayer.getCurrentPosition();
mediaPlayer.pause();
}
}
public static void resumeMedia(Context context) {
if (!mediaPlayer.isPlaying() amp;amp; mediaPlayer != null) {
mediaPlayer.seekTo(seek_position);
mediaPlayer.start();
}
}
public static void stopMedia(Context context) {
if (mediaPlayer.isPlaying() amp;amp; mediaPlayer != null) {
mediaPlayer.stop();
}
}
Используйте эти методы везде, где вы хотите, в своем приложении, просто вызывая их, как первый метод.
ПРИМЕЧАНИЕ : Разница здесь между pause()
amp; stop()
заключается в том , что вам нужно снова подготовить медиаплеер, если вы используете stop()
, в то pause()
время как это не требуется.