2017-02-20 7 views
1

私はメディアコントローラを使用してオーディオを再生するコードを作成しました。私のコードは正常に動作していますが、コードの実行中にいくつかの例外が発生します。オーディオを再生するためのメディアコントローラを作成する方法は?

public class CallHistoryActivity extends Activity implements MediaPlayer.OnPreparedListener, MediaController.MediaPlayerControl{ 

    Button audioPlayer; 

    private static final String TAG = "AudioPlayer"; 

    public static final String AUDIO_FILE_NAME = "audioFileName"; 

    private MediaPlayer mediaPlayer; 
    private MediaController mediaController; 
    private String audioFile; 

    private Handler handler = new Handler(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_call_history); 
     audioPlayer = (Button)findViewById(R.id.audioPlayer); 

    } 

    public void audioplayer(View view) 
    { 

     String path =new String(Environment.getExternalStorageDirectory() + "/NewCallLogs/Yaendi Yaendi.mp3 "); 
     Uri uri = Uri.parse(path); 

     mediaPlayer = new MediaPlayer(); 

     mediaController = new MediaController(this); 


     mediaPlayer.reset(); 
     try { 
      mediaPlayer.setDataSource(String.valueOf(uri)); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      mediaPlayer.setOnPreparedListener(this); 
      mediaPlayer.prepare(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 


public void stopPlayer(View view) 
{ 
    mediaPlayer.stop(); 
    mediaController.hide(); 
    mediaPlayer.release(); 
} 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     //the MediaController will hide after 3 seconds - tap the screen to make it appear again 
     mediaController.show(); 
     return false; 
    } 

    //--MediaPlayerControl methods---------------------------------------------------- 
    public void start() { 
     mediaPlayer.start(); 
    } 

    public void pause() { 
     mediaPlayer.pause(); 
    } 

    public int getDuration() { 
     return mediaPlayer.getDuration(); 
    } 

    public int getCurrentPosition() { 
     return mediaPlayer.getCurrentPosition(); 
    } 

    public void seekTo(int i) { 
     mediaPlayer.seekTo(i); 
    } 

    public boolean isPlaying() { 
     return mediaPlayer.isPlaying(); 
    } 

    public int getBufferPercentage() { 
     return 0; 
    } 

    public boolean canPause() { 
     return true; 
    } 

    public boolean canSeekBackward() { 
     return true; 
    } 

    public boolean canSeekForward() { 
     return true; 
    } 

    @Override 
    public int getAudioSessionId() { 
     return 0; 
    } 
    //-------------------------------------------------------------------------------- 

    public void onPrepared(MediaPlayer mediaPlayer) { 

     mediaPlayer.start(); 

     Log.d(TAG, "onPrepared"); 
     mediaController.setMediaPlayer((MediaController.MediaPlayerControl) this); 
     mediaController.setAnchorView(findViewById(R.id.main_audio_view)); 

     handler.post(new Runnable() { 
      public void run() { 
       mediaController.setEnabled(true); 
       mediaController.show(); 
      } 
     }); 
    } 
} 

logcatに示す例外は次にメディアコントローラのためのレイアウト設計が

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_audio_view" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context="com.seyali.newcalllogs.CallHistoryActivity"> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/audioPlayer" 
    android:onClick="audioplayer"/> 


<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/stopPlaying" 
    android:onClick="stopPlayer"/> 


<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="Now playing:" 
    android:textSize="25sp" 
    android:textStyle="bold" 
    /> 
<TextView 
    android:id="@+id/now_playing_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dip" 
    android:layout_marginLeft="10dip" 
    android:layout_marginRight="10dip" 
    android:layout_gravity="center" 
    android:text="Now playing.." 
    android:textSize="16sp" 
    android:textStyle="italic"/> 

下に表示され

02-20 14:56:42.402 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 46 
02-20 14:56:42.412 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 49 
02-20 14:56:42.412 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 52 
02-20 14:56:45.442 21410-21410/com.sey.newcalllogs E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering 
02-20 14:56:53.402 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648) 
02-20 14:56:56.072 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648) 
02-20 14:56:57.602 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648) 
02-20 14:56:58.792 21410-21410/com.sey.newcalllogs E/MediaPlayer: stop called in state 0 
02-20 14:56:58.792 21410-21410/com.sey.newcalllogs E/MediaPlayer: error (-38, 0) 

の下に表示される方法に私を助けてくださいこの例外を克服しました。私はすべての方法を試しましたが、私の問題は解決されませんでした。私を助けてください。

+1

これを参照してくださいを修正教えてください..... https://www.sitepoint.com/a-step-by -step-guide-to-building-an-android-audio-player-app/ –

+0

これを試してみます。 –

+0

その例外を解決する方法を教えてください。 –

答えて

2

MediaPlayerはデザインに従っている必要があります。 次を参照してください:https://developer.android.com/reference/android/media/MediaPlayer.html

mediaplayer.stop()は再生状態(startを呼び出した後)からトリガする必要があります。

2月20日14:56:58.792 21410から21410/E/MediaPlayerのcom.sey.newcalllogs:だけあなたがmediaPlayer.stop(呼び出すことができ、これらすべての工程の後に0

mediaPlayer.reset(); 
mediaPlayer.setDataSource(String.valueOf(uri)); 
mediaPlayer.prepare(); 

    public void onPrepared(MediaPlayer mediaPlayer) { 
     mediaPlayer.start(); 
    } 

状態で呼び出さ停止) ;

メソッドを呼び出す前に、メディアプレーヤの状態を確認し、この問題を解決するには、間違ったstate.Pleaseチェック

+0

mediaplayer.stop()を再生状態()から起動する必要があります。@ Ranjith KP –

+0

投稿した内容をどのように実装するかわかりません。 –

+0

そのリンクのフローチャートを参照してください。 –

0

からあなたの呼び出し元の停止を示す上記のエラー。たとえば、次のように

if(mediaPlayer.isPlaying()) { 
mediaPlayer.pause(); 

}

私はそれが問題か

+0

いいえ、問題は解決していません。 –

+0

このようにしましたか? public void stopPlayer(表示ビュー) { if(mediaPlayer.isPlaying()){ mediaPlayer.stop(); mediaController.hide(); mediaPlayer.release(); } } – dheerajraaj

関連する問題