android无线电流媒体背景和进度对话框
我正在android中开发一个无线电应用程序,它将从url流式传输,并在后台显示进度对话框加载流,但显示ANR。我正在使用mediaplayer的服务启动和停止。需要帮助。我已使用asynctask,但无法获得解决方案。 主课android无线电流媒体背景和进度对话框,android,audio-streaming,progressdialog,Android,Audio Streaming,Progressdialog,我正在android中开发一个无线电应用程序,它将从url流式传输,并在后台显示进度对话框加载流,但显示ANR。我正在使用mediaplayer的服务启动和停止。需要帮助。我已使用asynctask,但无法获得解决方案。 主课 button_Play.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new DownloadTas
button_Play.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new DownloadTask().execute();
}
});
class DownloadTask extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
progressDialog = ProgressDialog.show(MainActivity.this , "Android Streaming
Player" , "Connecting to Stream..." , true , false);
Log.d("onPreExecute()----->" , "MainActivity.class");
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params)
{
Log.d("doInBackground()----->" , "MainActivity.class");
startService(new Intent(MainActivity.this , RadioService.class));
return null;
}
@Override
protected void onPostExecute(Void result)
{
Log.d("onPostExecute()----->" , "MainActivity.class");
progressDialog.dismiss();
super.onPostExecute(result);
}
}
Here is service class:
RadioService.class
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.d("onStartCommand------->", "RadioService.class");
try
{
Log.d("MediaPlayer--->TRY BLOCK", "MediaPlayer");
URL url2 = new URL("http://141.139.35.23:8000");
URLConnection urlConnection = url2.openConnection();
player.setDataSource(urlConnection.getURL().toString());
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.prepare();
Log.d("MediaPlayer--->TRY BLOCK AFTER ASYNC", "MediaPlayer");
player.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
Log.d("MediaPlayer--->ON PREPARED BEGINS", "MediaPlayer");
//mp.setOnErrorListener(MainActivity.this);
mp.start();
//mp.setOnErrorListener(this);
mp.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
Toast.makeText(getApplicationContext() , "Streaming started " , Toast.LENGTH_SHORT).show();
Log.d("MediaPlayer--->ON PREPARED ENDS", "MediaPlayer");
}
});
} catch (Exception e)
{
Log.i("Exception", "Exception in streaming mediaplayer e = " + e);
}
return START_STICKY;
//return super.onStartCommand(intent, flags, startId);
}
按钮\u Play.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
新建下载任务().execute();
}
});
类DownloadTask扩展了AsyncTask
{
@凌驾
受保护的void onPreExecute()
{
progressDialog=progressDialog.show(MainActivity.this,“Android流媒体
播放器“,”连接到流“,”对,错);
Log.d(“onPreExecute()-->”,“MainActivity.class”);
super.onPreExecute();
}
@凌驾
受保护的Void doInBackground(Void…参数)
{
Log.d(“doInBackground()-->”,“MainActivity.class”);
startService(新意图(MainActivity.this、RadioService.class));
返回null;
}
@凌驾
受保护的void onPostExecute(void结果)
{
Log.d(“onPostExecute()------>”,“MainActivity.class”);
progressDialog.disclose();
super.onPostExecute(结果);
}
}
以下是服务级别:
无线电服务类
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId)
{
Log.d(“onStartCommand---------------->,“RadioService.class”);
尝试
{
Log.d(“MediaPlayer-->TRY BLOCK”、“MediaPlayer”);
URL url2=新URL(“http://141.139.35.23:8000");
URLConnection URLConnection=url2.openConnection();
player.setDataSource(urlConnection.getURL().toString());
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.prepare();
Log.d(“MediaPlayer-->TRY BLOCK AFTER ASYNC”,“MediaPlayer”);
player.setOnPreparedListener(新的OnPreparedListener()
{
@凌驾
已准备好公开作废(MediaPlayer mp)
{
Log.d(“MediaPlayer-->ON PREPARED start”,“MediaPlayer”);
//mp.setOneErrorListener(MainActivity.this);
mp.start();
//mp.SetOneRorListener(本);
mp.setWakeMode(getApplicationContext(),PowerManager.PARTIAL_WAKE_LOCK);
Toast.makeText(getApplicationContext(),“流媒体已开始”,Toast.LENGTH_SHORT.show();
Log.d(“MediaPlayer-->ON PREPARED end”,“MediaPlayer”);
}
});
}捕获(例外e)
{
Log.i(“异常”,“流媒体播放器中的异常e=“+e”);
}
返回开始时间;
//返回super.onStartCommand(intent、flags、startId);
}
类加载扩展了异步任务{
受保护的void onPreExecute(){
loadDialog.show();
}
@凌驾
受保护对象doInBackground(对象…arg0){
if(rFlag==false){
mediaPlayer=新的mediaPlayer();
试一试{
url=”rtsp://ra.dio";
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
}捕获(例外e){
loadDialog.disclose();
errmsg=“error”;
//TODO:处理异常
}
while(rFlag==false){
setOnBufferingUpdateListener(新的OnBufferingUpdateListener(){
public void onBufferingUpdate(MediaPlayer arg0,int arg1){
//TODO自动生成的方法存根
如果(arg1>=98){
loadDialog.disclose();
rFlag=true;
}
}
});
}
}
else if(rFlag==true){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
rFlag=false;
}
返回null;
}
@凌驾
受保护的void onPostExecute(对象结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
//装载
}
}
class Loading extends AsyncTask<Object, Object, Object>{
protected void onPreExecute(){
loadDialog.show();
}
@Override
protected Object doInBackground(Object... arg0) {
if(rFlag==false){
mediaPlayer = new MediaPlayer();
try{
url = "rtsp://ra.dio";
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
loadDialog.dismiss();
errmsg = "error";
// TODO: handle exception
}
while(rFlag==false){
mediaPlayer.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
public void onBufferingUpdate(MediaPlayer arg0, int arg1) {
// TODO Auto-generated method stub
if(arg1 >= 98){
loadDialog.dismiss();
rFlag=true;
}
}
});
}
}
else if(rFlag==true){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
rFlag=false;
}
return null;
}
@Override
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
// loaded
}
}