当单击ImageButton时尝试发出声音时,我的应用程序崩溃了,而且我已经盯着我的代码很长一段时间而没有找到答案。我希望你们能帮我看看我做错了什么。
我尝试使用失败的imageButton手动创建onClick事件,然后我通过Eclipse的拖放系统尝试了它,这使得按钮可以通过一个名为test123的方法通过main.xml进行点击。
我会发布我的代码,希望你们能找到解决方案。
提前致谢,
package com.example.Jeffrey;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Jeffrey extends Activity {
MediaPlayer mp;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp = MediaPlayer.create(this, R.raw.noise);
// View rakker = findViewById(R.id.imageView1);
//rakker.setOnClickListener(this);
}
public void test123()
{
mp.start();
}
}
与代码一起使用的xml:
<ImageButton
android:src="@drawable/rakker"
android:layout_height="250px"
android:layout_width="wrap_content" android:id="@+id/imageView1"
android:onClick="test123"></ImageButton>
答案 0 :(得分:1)
如果因为任何原因导致无法创建MediaPlayer对象,则返回该值可能值得检查null值。此外,它应该在完成时释放(也使用空检查)。
编辑:
虽然我之前的回答可能值得考虑,但您必须使用onClick方法将View作为参数。
//at the top of the file
import android.view.View;
public void test123(View v){
//v is the view that has been clicked (the ImageButton from your .xml file)
//do stuff
}
答案 1 :(得分:1)
基于在poset中提出的代码,我可以说该问题与MediaPlayer的使用有关。 MediaPlayer有几个状态,空闲,初始化,准备,启动等。
在您的代码中,您通过传递资源ID来创建媒体播放器对象;使媒体播放器从空闲状态进入初始化状态。接下来,您需要调用prepare()。但是你正在调用start()。可能是这导致了崩溃。
MediaPlayer的状态转换在android开发者网站上得到了很好的解释。 (Link)
词shash
答案 2 :(得分:1)
使用mp.prepare()准备MediaPlayer;在调用mp.start();
之前