2016-10-04 3 views
0

私はURLからソングをストリーミングすることができるようにアプリケーションを作成する予定です。したがって、main_activityのボタンが2つ目のアクティビティにリンクしています。 2番目のアクティビティでは、URLから再生し、URLから再生する2つのボタンがあります。その後、再生/停止は主なアクティビティではうまく動作しますが、2番目のアクティビティでは動作しません。メディアプレイヤー。 2回目のアクティビティに行くと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)

いくつかの助けやアドバイスを感謝しています。ありがとう!

+0

私はあなたのメディアプレーヤーをアクティビティから呼び出すのではなく、サービスに実装するべきだと考えます。これを行うことで、サービスの開始方法によっては、起動したコンポーネントが破壊されても実行し続けるプロセス –

+0

ありがとう!あなたは私に素晴らしいアイデアを与える! – Cjie

答えて

0

私たちは今、いくつかの重要なことを考慮する必要があります。

まず、なぜあなたがAndroidのサービスの使い方と使い方を知りたいのですか?それがどれほど素晴らしいかを知るようになると、あなたは驚くでしょう。

サービスからメディアを再生することは、メディア上でメディアを再生する最も優れた方法です。まず、デバイスを使ってメディアを再生するサービスの使用を検討する必要があります。

しかし、まだアクティビティからメディアを再生したい場合は、取得できない主な原因は、MediaPlayerライフサイクルを適切に実装していないことです。問題の原因が同じであれば、別の質問で私の答えに従ってください。ここにはlinkがあります。 MediaPlayerクラスのライフサイクルを完全に実装する必要があります。そうしないと、例外が発生したり、クラッシュすることさえあります。

私はそれが役に立ちそうです。

+0

ありがとう!あなたは私に素晴らしいアイデアを与える! – Cjie

+0

私の答えがあなたの問題を解決したと感じるなら、あなたはもっと答えることが良いと感じる答えを受け入れることができます。あるいは、私の答えが他のところであなたを助けてくれたと感じたら、それを投票することができます。それは私のために本当に役立つだろう。ありがとう、運が良かった。 –

関連する問題