android的service问题 本帖最后由 zhangle123 于 2012-08-03 12:06:08 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能描述的再详细点么?我的理解是你可以在onstartcommend中用if进行判断,if(mediaplayer==null){ creatMedia();}else{...} 就是在onstartcommend里面创建的时候就重复创建了,比如之前是打开MP3,现在你说暂停就不行了,因为不是同一个了,在自己的 private void play(MediaPlayer mediaPlayer, File f) ;里面创建的话呢,在private void pause(MediaPlayer mediaPlayer) 里面显示是null!不过 我先去试一下你的建议啊 你个建议和给你啊,经过你的建议和修改,已经ok了,看到你在csdn里面说你吧在线播放的问题解决了,我也遇到了这个问题,就是都inputstream的时候就是读不完,public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException, IOException { url = new URL(urlStr); URLConnection urlConn = url.openConnection(); urlConn.setReadTimeout(500000); //加大超时的时间 urlConn.setDoInput(true); InputStream inputStream = urlConn.getInputStream(); System.out.println("inputStream : " + inputStream.available()); return inputStream; }这里我是想下载一个MP3那么久先要把文件转换为流,可是怎么读读书不全,而且eclipse和myclispe读的大小还不一样,是什么问题啊,我的意思也就是说得到的inputStream只有200多个字节儿一个MP3有3-5Mb,希望你还可以救我一把啊 这里只是自己写的,可能比较粗糙,参考吧/** * MP3播放Service * @author NOHI * 2012-8-1 */public class Mp3PlayerService extends Service{ private Mp3Info mp3Info; //当前传入的mp3 private Mp3Info lastMp3Info;//上次mp3 MediaPlayer mediaPlayer; private String mp3State;//mp3当前状态 nothing Play Pause Stop @Override public IBinder onBind(Intent intent) { Log.d("Mp3PlayerService","当前MP3状态:" + mp3State); return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { String intentType = intent.getStringExtra(Mp3PlayerMeteData.INTENT_TYPE); mp3Info = (Mp3Info)intent.getSerializableExtra(Mp3PlayerMeteData.INTENT_TYPE_MP3INFO); if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(intentType)) { playMp3(); }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(intentType)) { pauseMp3(); }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP.equals(intentType)) { stopMp3(); } return 0; } /** * 播放mp3 * author:NOHI * date: 2012-8-1 */ private void playMp3(){ Log.d("Mp3PlayerService", "lastMp3Info: " + lastMp3Info + " \n mediaPlayer: " + mediaPlayer + " ,\n mp3State: " + mp3State); if ( null == lastMp3Info || !mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name()) || null == mediaPlayer || !Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State) //不在播放状态 ) { if (!Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) { //注意这里的path:file:/ 只能有一个 "/" 如果有"//"则报错 String path = "file:" + FileUtil.getExternalStorageDir(mp3Info.getMp3Name()); Log.d("Mp3PlayerService", path); mediaPlayer = MediaPlayer.create(this, Uri.parse(path)); //当播放完时,设置状态 mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp3State = null; Intent intent = new Intent(); intent.setAction(Mp3PlayerMeteData.INTENT_TYPE_MP3_PLAY_END); intent.putExtra(Mp3PlayerMeteData.INTENT_TYPE, Mp3PlayerMeteData.MP3PLAYER_OPERATION_END); Mp3PlayerService.this.sendBroadcast(intent); } }); Log.d("Mp3PlayerService", "mediaPlayer: " + mediaPlayer); mediaPlayer.setLooping(false); try { mediaPlayer.prepare(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) {//如果为暂停,则恢复运行 } mediaPlayer.start(); lastMp3Info = mp3Info; mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY; } } /** * 暂停mp3 * author:NOHI * date: 2012-8-1 */ private void pauseMp3(){ if ( null != lastMp3Info && null != mediaPlayer && mediaPlayer.isPlaying() && mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name()) && Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State) ) { mediaPlayer.pause(); mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE; } } /** * 停止 * author:NOHI * date: 2012-8-1 */ private void stopMp3(){ if ( null != lastMp3Info && null != mediaPlayer && ( Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State) || Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State) ) && mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name()) ) { mediaPlayer.stop(); mediaPlayer.release(); mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP; } }} android布局问题? android怎么传一个数组给PHP,大神帮我改改下面的代码 散分分享一下小弟整理的关于安卓学习教程的资料,不喜勿喷! 跑马灯 一个activity实现页面的切换时,edittext获取不到焦点问题 请教一个android上的java 变量命名问题 android的一些问题 应用内付费有人做过吗? 设置SlidingDraw组件和图标按钮ImageButton的问题 Android 4.4源码中platform.xml文件中定义的应用程序权限怎么这么少 TextView字符串没超出长度后面为什么总是显示省略号? 关于Lisiview的小问题~~
creatMedia();
}
else{
...
}
throws MalformedURLException, IOException {
url = new URL(urlStr);
URLConnection urlConn = url.openConnection();
urlConn.setReadTimeout(500000); //加大超时的时间
urlConn.setDoInput(true);
InputStream inputStream = urlConn.getInputStream();
System.out.println("inputStream : " + inputStream.available());
return inputStream;
}这里我是想下载一个MP3那么久先要把文件转换为流,可是怎么读读书不全,而且eclipse和myclispe读的大小还不一样,是什么问题啊,我的意思也就是说得到的inputStream只有200多个字节儿一个MP3有3-5Mb,希望你还可以救我一把啊
* MP3播放Service
* @author NOHI
* 2012-8-1
*/
public class Mp3PlayerService extends Service{
private Mp3Info mp3Info; //当前传入的mp3
private Mp3Info lastMp3Info;//上次mp3
MediaPlayer mediaPlayer;
private String mp3State;//mp3当前状态 nothing Play Pause Stop
@Override
public IBinder onBind(Intent intent) {
Log.d("Mp3PlayerService","当前MP3状态:" + mp3State);
return null;
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
String intentType = intent.getStringExtra(Mp3PlayerMeteData.INTENT_TYPE);
mp3Info = (Mp3Info)intent.getSerializableExtra(Mp3PlayerMeteData.INTENT_TYPE_MP3INFO);
if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(intentType)) {
playMp3();
}else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(intentType)) {
pauseMp3();
}else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP.equals(intentType)) {
stopMp3();
}
return 0;
}
/**
* 播放mp3
* author:NOHI
* date: 2012-8-1
*/
private void playMp3(){
Log.d("Mp3PlayerService", "lastMp3Info: " + lastMp3Info + " \n mediaPlayer: " + mediaPlayer + " ,\n mp3State: " + mp3State);
if ( null == lastMp3Info
|| !mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
|| null == mediaPlayer
|| !Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State) //不在播放状态
) {
if (!Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) {
//注意这里的path:file:/ 只能有一个 "/" 如果有"//"则报错
String path = "file:" + FileUtil.getExternalStorageDir(mp3Info.getMp3Name());
Log.d("Mp3PlayerService", path);
mediaPlayer = MediaPlayer.create(this, Uri.parse(path));
//当播放完时,设置状态
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp3State = null;
Intent intent = new Intent();
intent.setAction(Mp3PlayerMeteData.INTENT_TYPE_MP3_PLAY_END);
intent.putExtra(Mp3PlayerMeteData.INTENT_TYPE, Mp3PlayerMeteData.MP3PLAYER_OPERATION_END);
Mp3PlayerService.this.sendBroadcast(intent);
}
});
Log.d("Mp3PlayerService", "mediaPlayer: " + mediaPlayer);
mediaPlayer.setLooping(false);
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else if (Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)) {//如果为暂停,则恢复运行
}
mediaPlayer.start();
lastMp3Info = mp3Info;
mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY;
}
}
/**
* 暂停mp3
* author:NOHI
* date: 2012-8-1
*/
private void pauseMp3(){
if ( null != lastMp3Info && null != mediaPlayer && mediaPlayer.isPlaying()
&& mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
&& Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State)
) {
mediaPlayer.pause();
mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE;
}
} /**
* 停止
* author:NOHI
* date: 2012-8-1
*/
private void stopMp3(){
if ( null != lastMp3Info && null != mediaPlayer
&& ( Mp3PlayerMeteData.MP3PLAYER_OPERATION_PLAY.equals(mp3State)
|| Mp3PlayerMeteData.MP3PLAYER_OPERATION_PAUSE.equals(mp3State)
)
&& mp3Info.getMp3Name().equals(lastMp3Info.getMp3Name())
) {
mediaPlayer.stop();
mediaPlayer.release();
mp3State = Mp3PlayerMeteData.MP3PLAYER_OPERATION_STOP;
}
}
}