您好我使用http://code.google.com/p/aacdecoder-android/继承我的主要活动完整代码:http://pastebin.com/FmaVgfNP但现在我想将该应用程序放在后台,所以当人们按下后退按钮时,应用程序保持流式传输音频我尝试使用此:基本上应用程序有两个活动一个listview然后当我点击一个项目时它会自动播放该站点的流,但是当我按下后退按钮我的流停止时,我试图创建这样的服务:
public class MyService extends Service {
private static final String TAG = "AACPlayerActivity";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
//player = MediaPlayer.create(this, R.raw.braincandy);
//player.setLooping(false); // Set looping
}
@Override
public void onDestroy() {
Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
//player.stop();
}
@Override
public void onStart(Intent intent, int startid) {
Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
//player.start();
}
}
我尝试使用此代码在我的活动中配置服务:
startService(new Intent(this, MyService.class));
在aacplayer启动时的主要活动中
然后当我停下来的时候:
stopService(new Intent(this, MyService.class));
我试图在MyService.class中添加函数multiPlayer.playAsync( getUrl());
,以便当人们按下按钮时音频流保持流式传输。
但我得到了这个错误:
10-16 02:02:07.760: E/AndroidRuntime(25638): java.lang.RuntimeException: Unable to start service com.spoledge.aacplayer.MyService@41b40ca0 with Intent { cmp=com.spoledge.aacplayer/.MyService }: java.lang.NullPointerException
我不知道我是否正确使用逻辑我不太清楚我的播放器何时播放音频我可以将该动作注册为服务,因此它保留在后台。
非常感谢。
答案 0 :(得分:1)
我在使用绑定服务之前完成了这个。绑定更好,因为它允许您轻松实现暂停/停止/播放等。如果您的活动在后台被系统杀死,它可以在用户重新启动时重新绑定到服务,启用了播放控制功能。
我不确定将链接发布到我自己的博客是不好的做法,但完整的源代码位于http://www.speakingcode.com/2012/02/22/creating-a-streaming-audio-app-for-android-with-android-media-mediaplayer-android-media-audiomanager-and-android-app-service/
如果链接不是首选,我会在这里复制解决方案,但它很长:-)祝你好运,编码愉快!
如果您想使用yuo正在执行的已启动服务,并且丧失绑定服务的好处,那么您需要将MediaPlayer对象完全移入服务并退出活动。您可以在onCreate()中实例化MediaPlayer,但最好在onStartCommand()方法中启动它(调用playAsync())。