java - 我需要服务吗?

标签 java android android-layout android-studio

我正在尝试构建一个应用程序,其中一项 Activity 是“广播”,我有一个流媒体在线广播。如果我单击播放,一切正常,它会播放,当我单击停止时,它会停止。但问题是,当我更改 Activity 时,例如:从“广播”更改为“家庭”,或“联系”并返回“广播”,广播仍然运行,如果我想停止它,则不起作用。但如果我点击播放,音乐就会重复,因此我会打开同一个 radio 两次。看起来应用程序不知道 Radio 已经运行。我需要一个服务对象吗?如果我需要一项服务,有人可以解释一下我应该在代码中的具体位置实现它吗?这是我的 Java 代码:

public class radioActivity extends AppCompatActivity {


int length;
Button b1;
private Button Button1;
private Button Button2;
private String STREAM_URL = "http://192.99.35.93:6370/;stream.mp3";
private MediaPlayer mPlayer;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_radio);
    Button button1 = (Button) findViewById(R.id.buttonpredica1);
    Button button2 = (Button) findViewById(R.id.buttonpredica2);



    mPlayer = new MediaPlayer();

    mPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
    WifiManager.WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE))
            .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");

    wifiLock.acquire();
    wifiLock.release();

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
                                   public void onClick(View v) {

                                       try {
                                           mPlayer.reset();
                                           mPlayer.setDataSource(STREAM_URL);
                                           mPlayer.prepareAsync();
                                           mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                               @Override
                                               public void onPrepared(MediaPlayer mPlayer) {

                                                   mPlayer.start();

                                               }
                                           });
                                       } catch (IOException e) {
                                           e.printStackTrace();
                                       }
                                   }
                               });



    button2.setOnClickListener(new View.OnClickListener() {
                                   @Override
                                   public void onClick(View v) {
                                       mPlayer.stop();
                                       }


    });

最佳答案

每次单击开始按钮时都会创建您的 MediaPlayer,因此 MediaPlayer 的多个实例正在播放 Radio

如果您不希望在切换 Activity 时运行 MediaPlayer,您可以在 onPause() 中调用 mPlayer.stop();您的 Activity

这里您可以有几个选项,其中一个是创建 MediaPlayer 对象的单例,这样当您从 RadioActivity 来回切换时,正在使用 MediaPlayer 对象的同一实例,这将帮助您控制 MediaPlayer

Singleton design pattern in Java. Singleton Pattern says that just"define a class that has only one instance and provides a global point of access to it". In other words, a class must ensure that only single instance should be created and single object can be used by all other classes.

关于java - 我需要服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711513/

相关文章:

java - 像在 Swift/iOS 中一样在 Android 中以编程方式创建 UI 和框架

android - 为什么必须为放入 View 中的每个元素创建一组新的 RelativeLayout.LayoutParams?

java - ScrollView 高度不适合其内容 - Android Java

java - Json 文件作为 TestNG 中的数据提供者

java - 逐个字段验证 Java 对象

Java "new String[-1]"通过编译。怎么来的?

java - RemoteWebDriver - 调试 headless Docker 容器

android - 如何正确使用OnTouchEvent?

java - Android:角色显示为一个盒子

android - 以编程方式(作为动画)调整布局大小至 "wrap_content"