2012-08-01 25 views
0

我一直在試圖播放MP3文件。它只是不會工作。Android音樂播放器準備方法失敗

我確實設法播放它,並在幾天前使用相同/相似的代碼向其添加各種功能。只是試圖讓它再次完成,現在這些錯誤...

有人可以指出錯誤,爲什麼會發生這種情況。

爲了說明我使用了不同格式的URI,它們都不起作用。也許想到它的準備方法。

package com.player.phoneagent.gui; 


import java.io.IOException; 

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ImageButton; 


public class AndroidClientActivity extends Activity { 
    /** Called when the activity is first created. */ 

    private MediaPlayer mp; 
    String path = "android.resource://com.player.phoneagent/raw/test"; 

    ImageButton btn_prev; 
    ImageButton btn_play; 
    ImageButton btn_pause; 
    ImageButton btn_next; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn_prev = (ImageButton) findViewById(R.id.ImageButton01); 
     btn_pause = (ImageButton) findViewById(R.id.ImageButton02); 
     btn_play = (ImageButton) findViewById(R.id.ImageButton03); 
     btn_next = (ImageButton) findViewById(R.id.ImageButton04); 

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


     btn_play.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       try { 
        mp.setDataSource(path); 

       } catch (IllegalArgumentException e) { 

        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       try { 
        mp.prepare(); 
       } catch (IllegalStateException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       mp.start(); 

      } 
     }); 

    } 

} 






08-01 07:06:00.142: W/KeyCharacterMap(407): No keyboard for id 0 
    08-01 07:06:00.142: W/KeyCharacterMap(407): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 
    08-01 07:06:05.821: D/dalvikvm(407): GC_EXPLICIT freed 21K, 53% free 2568K/5379K, external 3207K/3962K, paused 55ms 
    08-01 07:06:20.311: D/dalvikvm(444): GC_EXTERNAL_ALLOC freed 52K, 53% free 2552K/5379K, external 1969K/2137K, paused 58ms 
    08-01 07:06:43.171: E/MediaPlayer(444): error (1, -2147483648) 
    08-01 07:06:43.171: W/System.err(444): java.io.IOException: Prepare failed.: status=0x1 
    08-01 07:06:43.171: W/System.err(444): at android.media.MediaPlayer.prepare(Native Method) 
    08-01 07:06:43.171: W/System.err(444): at com.player.phoneagent.gui.AndroidClientActivity$1.onClick(AndroidClientActivity.java:60) 
    08-01 07:06:43.171: W/System.err(444): at android.view.View.performClick(View.java:2485) 
    08-01 07:06:43.171: W/System.err(444): at android.view.View$PerformClick.run(View.java:9080) 
    08-01 07:06:43.181: W/System.err(444): at android.os.Handler.handleCallback(Handler.java:587) 
    08-01 07:06:43.181: W/System.err(444): at android.os.Handler.dispatchMessage(Handler.java:92) 
    08-01 07:06:43.181: W/System.err(444): at android.os.Looper.loop(Looper.java:123) 
    08-01 07:06:43.181: W/System.err(444): at android.app.ActivityThread.main(ActivityThread.java:3683) 
    08-01 07:06:43.181: W/System.err(444): at java.lang.reflect.Method.invokeNative(Native Method) 
    08-01 07:06:43.181: W/System.err(444): at java.lang.reflect.Method.invoke(Method.java:507) 
    08-01 07:06:43.181: W/System.err(444): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
    08-01 07:06:43.181: W/System.err(444): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
    08-01 07:06:43.181: W/System.err(444): at dalvik.system.NativeStart.main(Native Method) 
    08-01 07:06:43.181: E/MediaPlayer(444): start called in state 0 
    08-01 07:06:43.181: E/MediaPlayer(444): error (-38, 0) 
    08-01 07:06:43.181: E/MediaPlayer(444): Error (-38,0) 
+0

可能的重複:http://stackoverflow.com/questions/9008770/media-player-called-in-state-0-error-38-0 – Eric 2012-08-01 06:24:53

+0

我看到了這個問題,但那個建議使用某種OnListener ......讓我感到懊惱的是,這曾經是完美的工作,我做了很少的改變,現在它拒絕工作 – Achilles 2012-08-01 06:33:33

+0

也許回頭看看你的改變,讓他們單獨看看哪一個導致問題? – Eric 2012-08-01 06:35:33

回答

1

我一直有問題,試圖用「原始」文件夾......我建議把聲音文件中的「資產」和使用方法,這裏設置/準備/即插即用:

http://droidapp.co.uk/2011/06/08/android-dev-playing-a-mp3-from-assets/

+0

這可以完美的工作,但我的工作方式也是如此,特別是我可能需要播放SD卡以及原始文件夾中的歌曲......想知道爲什麼它停止工作 – Achilles 2012-08-01 06:31:57

1

就做這樣的事情:

​​

看看是否能工程。

+0

我是否需要mp = MediaPlayer。創建(this,R.raw.yourSongFileName);兩次? – Achilles 2012-08-01 06:35:04

+0

我這麼認爲,因爲當你第一次啓動你的活動時,onCreate被調用,這是你第一次設置播放器。然後,每當你點擊按鈕,我停止聲音,並使播放器爲空,那麼我創建另一個播放器實例。 – 0gravity 2012-08-01 06:37:50