媒体播放器。第二次活动时,来自URL的歌曲无法播放。

时间:2016-10-04 17:34:10

标签: android android-mediaplayer

我计划创建一个应用程序,允许用户从URL流式传输歌曲,所以,我在main_activity中有1个链接到第二个活动的按钮。在第二个活动中,我有两个按钮,从URL播放和从URL停止。然后播放/停止在主要活动时工作正常,但在第二次活动时它不会工作。

这是MainActivity:



package example.cjie.com.streamingdropboxmusicdemo3;

import android.content.Intent;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }


    public void Song2Activity(View view){
        Intent Song2Intent = new Intent(this, Main2Activity.class);
        startActivity(Song2Intent);
    }

}




这是Main2Activity:



package example.cjie.com.streamingdropboxmusicdemo3;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.io.IOException;

public class Main2Activity extends AppCompatActivity  {

    private Button buttonStop,buttonStart;

    MediaPlayer mediaplayer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        buttonStart = (Button)findViewById(R.id.button1);
        buttonStop = (Button)findViewById(R.id.button2);

        mediaplayer = new MediaPlayer();
        mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        buttonStart.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {

                    mediaplayer.setDataSource(getResources().getString(R.string.song1));
                    mediaplayer.prepareAsync();


                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SecurityException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                mediaplayer.start();
                return;

            }
        });

        buttonStop.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(mediaplayer.isPlaying()){
                    mediaplayer.reset();
                    //mediaplayer.release();
                    //return;
                }
            }
        });
    }

}




这是错误消息:



D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so

          [ 10-05 01:07:59.684 18774:18798 E/         ]
          Device driver API match
          Device driver API version: 29
          User space API version: 29 


          [ 10-05 01:07:59.684 18774:18798 E/         ]
          mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Tue Jul 22 19:59:34 KST 2014 
I/OpenGLRenderer: Initialized EGL, version 1.4
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
D/OpenGLRenderer: endAllStagingAnimators on 0x519e2b10 (RippleDrawable) with handle 0x519e7fa8
W/System.err: java.io.IOException: setDataSource failed.: status=0x80000000
W/System.err:     at android.media.MediaPlayer.nativeSetDataSource(Native Method)
W/System.err:     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1080)
W/System.err:     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1041)
W/System.err:     at example.cjie.com.streamingdropboxmusicdemo3.Main2Activity$1.onClick(Main2Activity.java:38)
W/System.err:     at android.view.View.performClick(View.java:5204)
W/System.err:     at android.view.View$PerformClick.run(View.java:21156)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err:     at android.os.Looper.loop(Looper.java:148)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5466)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
E/MediaPlayer: start called in state 1
E/MediaPlayer: error (-38, 0)
E/MediaPlayer: Error (-38,0)




欣赏一些帮助和建议。谢谢!

1 个答案:

答案 0 :(得分:0)

我们现在必须考虑一些重要的事情。

首先,我想让你知道为什么要使用以及如何在android中使用服务。当你知道它有多棒时,你会感到惊讶。

从服务播放媒体是在设备上播放媒体的最佳方式。首先,您必须考虑使用服务在设备上播放媒体。

但是,如果您仍想播放来自Activity的媒体,那么您无法获得它的主要原因是,您没有以良好的方式实现MediaPlayer生命周期。关于问题原因相同的另一个问题,请按照我的回答。这是link。你必须完美地实现MediaPlayer类的生命周期,否则会产生异常甚至崩溃。

我希望它会有所帮助。