我是Android的新手,我正在尝试做一些简单的事情,比如点击按钮时播放自定义MP3。这似乎是fairly common question,但即使我的代码遵循示例,我也没有收到任何错误,我在模拟器中都听不到任何声音或者是真正的手机。
我的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 :(得分: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;
}
}
答案 1 :(得分:3)
您应该将代码放在onCreate中并且在setContentView()之后,因为您的方法/构造函数public void MyActivity(Bundle 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.");
}