2013-09-16 154 views
0

這個想法是點擊微調,讓它給你一個播放聲音的時間列表。一旦你選擇一個聲音,然後點擊它應該播放的按鈕。它不工作,我不知道爲什麼。我有一個主屏幕和一個家庭活動,當你點擊一個按鈕時,你會看到一個新的活動和一個新的佈局。我可以得到新的佈局和新的活動加載,這是下面的特色,但聲音和微調不啓動。媒體播放器不工作在Android

package com.androidsleepmachine.gamble; 

package com.androidsleepmachine.gamble; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 

public class Ship extends Activity implements View.OnClickListener { 
public static final int[] TIME_IN_MINUTES = { 30, 45, 60 }; 
public MediaPlayer mediaPlayer; 
public Handler handler = new Handler(); 
public Button button1; 
public Spinner spinner1; 

// Initialize the activity 
@Override 
public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.ship); 

    button1 = (Button) findViewById(R.id.btnSubmit); 
    button1.setOnClickListener(this); 
    spinner1 = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, 
      android.R.layout.simple_spinner_item); 
} 

// Play the sound and start the timer 
private void playSound(int resourceId) { 
    // Cleanup any previous sound files 
    cleanup(); 
    // Create a new media player instance and start it 
    mediaPlayer = MediaPlayer.create(this, resourceId); 
    mediaPlayer.start(); 
    // Create the timer to stop the sound after x number of milliseconds 
    int selectedTime = TIME_IN_MINUTES[spinner1.getSelectedItemPosition()]; 
    handler.postDelayed(runnable, selectedTime * 60 * 1000); 
} 

// Handle button callbacks 
@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btnSubmit: 
      playSound(R.raw.ocean_ship); 
      break; 
    } 
} 

// Stop the sound and cleanup the media player 
public void cleanup() { 
    if (mediaPlayer != null) { 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     mediaPlayer = null; 
    } 
    // Cancel any previously running tasks 
    handler.removeCallbacks(runnable); 
} 

// Runnable task used by the handler to stop the sound 
public Runnable runnable = new Runnable() { 
    public void run() { 
     cleanup(); 
    } 
}; 

}

回答

1

看起來問題出在你的switch狀態。您正在檢查的button1,但您已將listener指定爲button1的唯一按鈕的id的值爲btnSubmit。所以你的playSound()函數永遠不會被調用。

更改onClick()

// Handle button callbacks 
@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.btnSubmit: 
      playSound(R.raw.ocean_ship); 
      break; 
    } 
} 

編輯

爲了您ArrayAdapter嘗試像

ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, TIME_IN_MINUTES); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);   
spinner1.setAdapter(adapter); 
+0

我似乎有辦法忽略了按鈕名稱問題,謝謝你答覆。我正在測試它。這會解決微調設置時間問題嗎?我正在使用模擬器,但是當我第一次構建應用程序時(完全公開,我已經自學了大約一週),我只是每個按鈕都設置爲播放剪輯,並且聲音將在模擬器中播放。 – user2727048

+0

我不確定Spinner問題是什麼......請描述。但除了初始化它之外,我沒有看到你用'Spinner'做了什麼 – codeMagic

+0

int selectedTime = TIME_IN_MINUTES [spinner1.getSelectedItemPosition()]; handler.postDelayed(runnable,selectedTime * 60 * 1000);至少我認爲這就是微調者將這些價值觀放在一起,這樣我就可以花時間播放這首歌。 – user2727048

0

你在模擬器這樣做呢? Mediaplayer不適用於模擬器。你將不得不在真實的設備上進行測試。

+0

這首歌將扮演按鈕被點擊時不卻對應用強行關閉。 – user2727048

+0

_「Mediaplayer不能在模擬器上工作。」_咦?從何時起?模擬器中的音頻播放過去肯定奏效。 – Michael

+0

mediaplayer在模擬器中工作對我來說,我只是沒有得到一個力量關閉時,按鈕被點擊,聲音開始以及微調不工作 – user2727048