2013-09-16 183 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