在android应用程序中使用MediaPlayer的正确方法

2024-01-12

抱歉我的英语,但我来自巴西,我使用谷歌翻译。

好吧,我在这个应用程序中遇到了困难,我试图制作一个在线广播流媒体,在 2.2 版本中工作正常,但在 4.0 版本中不起作用。没有发生错误,只是不起作用。下面是我的代码。

我很感激任何帮助。

package com.radiomiriam;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class Main extends Activity {
public String url = "http://69.64.48.96:9880";
public MediaPlayer player = new MediaPlayer();

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void stop(){
    Toast.makeText(getApplicationContext(), "Finalizando...", Toast.LENGTH_SHORT).show();
    if(player.isPlaying()){
        player.stop();
    }
}

public void play(){
    if(player.isPlaying()){
        Toast.makeText(getApplicationContext(), "Já está em execução!", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(getApplicationContext(), "Preparando...", Toast.LENGTH_SHORT).show();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
        try {
            player.setDataSource(url);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            player.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        player.start();
    }
}

public void onClick(View v) {
    final int id = v.getId();
    switch (id) {
    case R.id.btnPlay:
        play();
        break;
    case R.id.btnStop:
        stop();
        break;
    }
}
}

您好,请原谅我的坚持,但我仍然没有找到解决我的问题的方法,也不知道如何解决,我再次请求您帮助解决这个问题。

该应用程序在版本 2.x 和 3.x 中运行,但不在版本 4.x 中运行。下面是该项目的下载链接,您可以查看并帮助我。

http://nsi.inf.br/RadioMiriam.rar http://nsi.inf.br/RadioMiriam.rar(已删除)


我下载了你的项目,它实际上返回错误代码: E/MediaPlayer(1976):错误(-38,0)

这是由于在准备好之前启动媒体播放器而导致的。

我做了一些改变,它就开始起作用了。你应该 :

  1. 在 MediaPlayer 上设置 onPrepared 侦听器(即在 onCreate 中)

    player.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
    
  2. 从 play() 方法中删除player.start()

  3. 以这种方式设置数据源(在您的 play() 方法中)

    player.setDataSource(this, Uri.parse("http://69.64.48.96:9880/"));
    

它适用于我的 Android 4.0.3 的 HTC Sensation

如果您需要任何帮助,请告诉我。

编辑:我忘了,我也删除了

player.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

这是多余的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在android应用程序中使用MediaPlayer的正确方法 的相关文章

随机推荐