2012-07-07 197 views
5

我是Android新手,我試圖做一些簡單的操作,比如單擊按鈕時播放自定義MP3。這似乎是一個fairlycommonquestion,但即使我的代碼遵循的例子,我沒有得到任何錯誤,我沒有聽到模擬器或真正的手機中的任何聲音。在Android中點擊按鈕時播放聲音

我MainActivity.java:

public class MainActivity extends Activity { 

    private static final String TAG = "MyActivity"; 

    public void MyActivity(Bundle onSavedStateInstance) { 
     Log.v(TAG, "Initializing sounds..."); 

     final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 

     Button play_button = (Button)this.findViewById(R.id.play_button); 
     play_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.v(TAG, "Playing sound..."); 
       mp.start(); 
      } 
     }); 
     Log.v(TAG, "Sounds initialized."); 
    } 

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

而且我activity_main.xml中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:padding="@dimen/padding_medium" 
     android:text="@string/hello_world" 
     tools:context=".MainActivity" /> 

    <Button 
     android:id="@+id/play_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/play_button" /> 

</RelativeLayout> 

我使用的Eclipse插件,它不顯示任何錯誤,開發和似乎運行應用程序在模擬器或真正的手機中正確,但是當我點擊播放按鈕時,沒有任何反應。我不確定模擬器是否支持聲音(但我假設它是這樣的),並且我已經確認聲音在手機上取消靜音。

我在做什麼錯?

此外,我沒有看到我的日誌語句顯示在任何地方,無論是在Eclipse的控制檯或LogCat面板。我應該看到那些打印的地方?

+0

你可能想調用一些簡單的東西,如'MusicManager.getInstance()。play(this,R.raw.my_sound);'。爲此,您需要正確的資源管理。您可以爲此使用一個輕量級庫:https://github.com/delight-im/Android-Audio – caw 2015-04-01 22:43:05

回答

10

這不會工作的一個非常簡單的原因:MyActivity()永遠不會被調用。

Android會調用您的Activity的onCreate(),但其他方法調用必須由您完成。因爲你永遠不會稱你爲MyActivity()方法,所以該按鈕永遠不會被賦予onClickListener(),並且聲音從不播放。請嘗試使用下面的代碼來代替:

public class MainActivity extends Activity { 

    private static final String TAG = "MyActivity"; 

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

     Log.v(TAG, "Initializing sounds..."); 

     final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 

     Button play_button = (Button)this.findViewById(R.id.play_button); 
     play_button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Log.v(TAG, "Playing sound..."); 
       mp.start(); 
      } 
     }); 
     Log.v(TAG, "Sounds initialized."); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 
3

你應該把你的代碼的setContentView()內的onCreate後,因爲你的方法/構造公共無效MyActivity(捆綁onSavedStateInstance)永遠不會被調用,因此永遠不會執行你的代碼。類似這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.v(TAG, "Initializing sounds..."); 
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560); 
    Button play_button = (Button)this.findViewById(R.id.play_button); 
    play_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Log.v(TAG, "Playing sound..."); 
      mp.start(); 
     } 
    }); 
    Log.v(TAG, "Sounds initialized."); 
} 
相關問題