java - 媒体播放器在 api 级别 29 上不再工作
问题描述
我一直在使用来自托管 mp3 文件的 http 服务器的媒体播放器流的简单示例
当我在 api 级别 29 上尝试相同的代码时,它可以完美运行(即在 api 级别 23 上)
它不再起作用并给出以下错误代码:
2020-05-06 04:02:47.899 6926-6953/com.example.alarmmanager E/MediaPlayerNative: error (1, -2147483648)
2020-05-06 04:02:47.900 6926-6926/com.example.alarmmanager E/MediaPlayer: Error (1,-2147483648)
我一直在到处寻找错误代码的含义或如何使其在 api 级别 29 及以上我的代码上工作:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button play = (Button) findViewById(R.id.btn_play);
final Button stop = (Button) findViewById(R.id.btn_stop);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaplayerhandler("start");
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaplayerhandler("pause");
}
});
}
public void mediaplayerhandler(String status){
final MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
String url = "http://server.com/song.mp3"; // your URL here
try {
mediaPlayer.setDataSource(url);
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare(); // might take long! (for buffering, etc)
} catch (IOException e) {
e.printStackTrace();
}
if(status.equals("pause")){
mediaPlayer.pause();
}
else if(status.equals("start")){
mediaPlayer.start();
}
}
解决方案
看看是否禁用了明文 http 流量支持。它在 Android 28 及更高版本中默认禁用。
看到这个链接
推荐阅读
- sockets - 为什么我们在使用SocketActivityTrigger的时候需要事件StreamSocketListener.ConnectionReceived?
- java - 同等比较后如何删除元素?
- reactjs - 对于 React 应用程序主题,material-ui makeStyles 与 SCSS 架构相比是否有优势?
- python - 在python中为类定义参数
- exe - 无法访问 Windows Installer 服务。如果未正确安装 Windows 安装程序,则可能会发生这种情况
- nginx - 安装了多少nginx权重(不安装应用)
- variables - 使用带有 shell 变量的 find 命令不起作用(没有这样的文件或目录)
- python-3.x - 对以下代码的输出感到困惑
- swift - 有没有办法用 == 来测试 nil
- coq - 如何显示函数的注入性?