2013-03-20 20 views
18

Bu, bir dosya adını (.mp3) başka bir sınıftan varlık dosyamda çok sayıda mp3 dosyasına sahip olarak dinamik olarak almak için kullanıyorum:Android Ortam Yürütücüsü: Başlangıç ​​durumu 4 hatası (-38,0)

playAudioButton.setOnClickListener(new OnClickListener() { 


      @Override 
      public void onClick(View v) 
      { 
       FileName audio=new FileName(); 
       String audioName=audio.getAudioName(count).toString(); 
       if(audioName=="NO Audio") 
       { 

        Toast.makeText(getApplicationContext(), "No Audio for this page", Toast.LENGTH_SHORT).show(); 

       } 
       else 
       { 

        try { 
         afd=getAssets().openFd(audioName + ".mp3"); 
         mp = new MediaPlayer(); 
         mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
         mp.prepareAsync(); 
         mp.start(); 

        } catch (IllegalArgumentException 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(); 
        } 
       } 




      } 
     }); 


    } 

Giriş Cat:

03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
03-20 11:22:24.968: D/libEGL(4579): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so 
03-20 11:22:24.976: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so 
03-20 11:22:24.984: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so 
03-20 11:22:25.070: D/OpenGLRenderer(4579): Enabling debug mode 0 
03-20 11:22:38.773: E/MediaPlayer(4579): start called in state 4 
03-20 11:22:38.773: E/MediaPlayer(4579): error (-38, 0) 
03-20 11:22:38.773: E/MediaPlayer(4579): Error (-38,0) 

Nokta belirtilmelidir: I()

cevap I prepareAsync kullandık 2. prepareAsync() kullanarak yığın taşması benzer mesajları kontrol ettikten 1.

Şimdiden teşekkürler.

cevap

19

'da oynamaya başlayabilirsiniz. Ayrıca, başlangıç ​​yöntemini çağırmak için aşağıdaki onPrepared() yöntemini kullanabilirsiniz. , MediaPlayer hazırlandıktan sonra çağrılır.

mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 

      mp.start(); 

     } 
    }); 
+3

gitmek olacaktır. – WideFide

2

yerine MediaPlayer bu preparedSync/prepare yöntemi kullanarak sadece bu hazırlamak ve

kendisi oynamaya başlayın Veya başka bir yol onPrepareListener() kullanmaktır olacak MediaPlayer.create()

MediaPlayer mediaPlayer = MediaPlayer.create(context, URI.parse("file://"+filePath)); 

için URI getiren dönüşüm dosya yolu geçebilir of MediaPlayer ve daha sonra

0

devlet 4 Mediaplayer devlet

hazırlanmasında ve biz

Mediaplayer.start() 
Mediaplayer.stop() 
Mediaplayer.pause() 

veya başka bir şey gibi diğer eylemleri çağrı anlamına gelir.

Kodunuzdaki gereğince Eğer Onprepared() yöntemi ayrıca sürecini

yapabilirsiniz denilen bir kez

MediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      // TODO Auto-generated method stub 
      mp.start(); 
     } 
    }); 

sadece

mp.start() 
kaldırmak yöntemini onprepare yazmaya gerek Mediaplayer.start();

olduğunu

01'den sonra
mp.prepareAsync(); 

Ve iyi ben bu kullanarak ancak yine de bu hatayı alıyorum