0

嗨,我正在使用http://code.google.com/p/aacdecoder-android/这里是我的主要活动完整代码: http: //pastebin.com/FmaVgfNP但现在我想将该应用程序放在后台,所以当人们按下后退按钮应用程序保持流式传输音频我尝试使用这个:基本上该应用程序有两个活动一个列表视图然后当我单击一个项目时它会自动播放该站的流但是当我按下返回按钮时我的流停止,我试图创建一个像这样的服务:

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 oncreate 中添加该功能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

我不知道我的逻辑是否正确我不太清楚我的播放器何时流式传输音频我可以将该操作注册为服务,以便它保持在后台。

非常感谢。

4

1 回答 1

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/

如果链接不是首选,我将在这里复制解决方案,但它很长:-) 祝你好运,编码愉快!

如果您想使用您正在做的启动服务,并失去绑定服务的好处,那么您需要将您的 MediaPlayer 对象完全移入服务并移出活动。您可以在 onCreate() 中实例化 MediaPlayer,但最好在 onStartCommand() 方法中启动它(调用 playAsync())。

于 2012-10-16T07:38:50.813 回答