安卓在线音频播放器的问题

Ericxx 发布于 2012/09/25 14:49
阅读 2K+
收藏 0

正在做一个在线音频播放器,做到了那个url连接服务器然后边下载边播放音乐,这个怎么做呢?还得更新进度条,做到这里不会做了,思路也断了,这是我的代码,能否给我一个建议,指明一条方向

package com.xuluyang.myplayer;

 

import java.net.HttpURLConnection;

import java.net.URL;

 

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.Intent;

import android.media.MediaPlayer;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.Editable;

import android.text.TextWatcher;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

public class MyPlayerActivity2 extends Activity implements OnClickListener {

private MediaPlayer mediaPlayer;

private ConnectivityManager connectivityManager;

private Intent mintent;

private EditText et_name1;

private EditText et_name2;

private Button bt_play;

private Button bt_pause;

private Button bt_restart;

private Button bt_stop;

private String url1;

private String url2;

private ProgressDialog progressDialog;

 

private boolean isplay = false;// 是否播放的标志位

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

// TODO Auto-generated method stub

if (msg.what >= 100) {

progressDialog.cancel();

}

progressDialog.setProgress(msg.what);

super.handleMessage(msg);

}

 

};

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main2);

mintent = getIntent();

init();

url1 = mintent.getStringExtra("name");

et_name1.setText(url1);

play(url1);

// 播放完成监听

mediaPlayer

.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

 

@Override

public void onCompletion(MediaPlayer mp) {

mediaPlayer.release();// 释放资源

}

});

// 播放时出现错误监听

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {

 

@Override

public boolean onError(MediaPlayer mp, int what, int extra) {

 

mediaPlayer.release();

Toast.makeText(getApplicationContext(), "出现错误", 1).show();

return false;

}

});

// 对输入框进行监听,如果改变则处理

et_name2.addTextChangedListener(new TextWatcher() {

 

@Override

public void onTextChanged(CharSequence s, int start, int before,

int count) {

// TODO Auto-generated method stub

 

}

 

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

// TODO Auto-generated method stub

 

}

 

// 改变之后

@Override

public void afterTextChanged(Editable s) {

// TODO Auto-generated method stub

mediaPlayer.stop();// 停止播放

play(et_name2.getText().toString());// 重新播放

}

});

}

 

/**

* 播放音频

*/

private void play(String urll) {

try {

// 判断是否有可用网络

NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();

if (netInfo != null) {

boolean flag = netInfo.isAvailable();

if (flag) {

int type = netInfo.getType();

if (type == ConnectivityManager.TYPE_WIFI) {

Toast.makeText(this, "当前是wifi状态", 1).show();

} else {

Toast.makeText(this, "当前是普通上网状态,如果有wifi请优先选用wifi网络", 1)

.show();

}

// 联网播放音乐

URL url = new URL(urll);

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

conn.setConnectTimeout(5000);

conn.setRequestMethod("GET");

if (conn.getResponseCode() != 200) {

try {

progressDialog = new ProgressDialog(

MyPlayerActivity2.this);

updateThread thread = new updateThread();

progressDialog

.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

progressDialog.setMessage("请稍等......");

progressDialog.setTitle("缓冲文件中");

progressDialog.setProgress(0);

progressDialog.setMax(100);

progressDialog.show();

thread.start();

mediaPlayer.reset();

mediaPlayer.setDataSource(urll);

} catch (Exception e) {

e.printStackTrace();

}

mediaPlayer.prepareAsync();

// 设置准备监听

mediaPlayer

.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

 

@Override

public void onPrepared(MediaPlayer mp) {

mediaPlayer.start();

isplay = true;

}

});

 

} else {

Toast.makeText(getApplicationContext(), "请求响应错误", 1)

.show();

}

} else {

Toast.makeText(this, "无可用网络", 0).show();

}

}

 

} catch (Exception e) {

e.printStackTrace();

}

}

 

class updateThread extends Thread {

public void run() {

handler.sendEmptyMessage(0);

 

// try {

// updateThread.sleep(1000);

// handler.sendEmptyMessage(10);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(20);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(30);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(40);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(50);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(60);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(70);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(80);

// updateThread.sleep(1000);

// handler.sendEmptyMessage(100);

// updateThread.sleep(1000);

//

// } catch (InterruptedException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

 

}

};

 

/**

* 初始化参数

*/

private void init() {

mediaPlayer = new MediaPlayer();

connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

et_name1 = (EditText) findViewById(R.id.et_name1);

et_name2 = (EditText) findViewById(R.id.et_name2);

bt_play = (Button) findViewById(R.id.play2);

bt_play.setOnClickListener(this);

bt_pause = (Button) findViewById(R.id.bt_pause);

bt_pause.setOnClickListener(this);

bt_restart = (Button) findViewById(R.id.bt_restart);

bt_restart.setOnClickListener(this);

bt_stop = (Button) findViewById(R.id.bt_stop);

bt_stop.setOnClickListener(this);

}

 

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

int id = v.getId();

switch (id) {

case R.id.play2:

url2 = et_name2.getText().toString();

if (url2.equals("")) {

Toast.makeText(this, "url不能为空", 1).show();

} else if (url2.endsWith(".wav") || url2.endsWith(".mp3")) {

play(url2);

} else {

Toast.makeText(this, "url格式不对", 1).show();

}

break;

case R.id.bt_pause:

if (isplay) {

mediaPlayer.pause();

bt_pause.setText("继续");

isplay = false;

} else {

mediaPlayer.start();

bt_pause.setText("暂停");

isplay = true;

}

break;

case R.id.bt_restart:

play(url1);

break;

case R.id.bt_stop:

mediaPlayer.stop();

break;

 

default:

break;

}

}

 

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

mediaPlayer.release();

}

 

}


加载中
0
Ericxx
Ericxx
估计上面的看着不舒服,我截图下
0
Ericxx
Ericxx
这是截图,我的play方法的进度条弄不出来,然后就是不知道该怎样边下载边播放,所以下载直接就没写。。。。 求各位帮助下 帮助菜鸟进步
0
Ericxx
Ericxx
木有高人指点吗
0
迷途d书童
迷途d书童
play方法的进度条不显示,看看是否进入“ if (conn.getResponseCode() != 200) {”这个if语句里面了。
0
Ericxx
Ericxx

引用来自“迷途d书童”的答案

play方法的进度条不显示,看看是否进入“ if (conn.getResponseCode() != 200) {”这个if语句里面了。
进度条是一方面,关键是我现在对 边下边播没有思路,能给点提示吗
0
迷途d书童
迷途d书童
没做过播放器这块的,这有个别人说的思路:
1:开一个任务去下载文件
2:再开一个任务去播放本地文件(下载速度很慢的时候,播放会不完全,就结束的情况,这时候你需要保存当前结束的时间,然后等文件下载大小超过一定数值,你再去播放本地文件,seekTo一下就ok)
当然对于本地文件下载进度、文件大小、播放时长、当前播放时长、播放器状态等变量要做好控制
这里有篇文章希望对你有用:http://my.oschina.net/u/269112/blog/69211

0
Ericxx
Ericxx

引用来自“迷途d书童”的答案

没做过播放器这块的,这有个别人说的思路:
1:开一个任务去下载文件
2:再开一个任务去播放本地文件(下载速度很慢的时候,播放会不完全,就结束的情况,这时候你需要保存当前结束的时间,然后等文件下载大小超过一定数值,你再去播放本地文件,seekTo一下就ok)
当然对于本地文件下载进度、文件大小、播放时长、当前播放时长、播放器状态等变量要做好控制
这里有篇文章希望对你有用:http://my.oschina.net/u/269112/blog/69211

这个貌似就是我想要的,谢谢帮助了
返回顶部
顶部