5

我是 Android 新手,我正在尝试做一些简单的事情,比如在单击按钮时播放自定义 MP3。这似乎是一个相当 普遍的 问题,但即使我的代码遵循示例,并且我没有收到任何错误,我在模拟器或真实手机中都听不到任何声音。

我的 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 面板中,我都没有看到我的日志记录语句。我应该在某处看到那些打印的吗?

4

2 回答 2

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;
    }

}
于 2012-07-07T01:08:27.730 回答
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.");
}
于 2012-07-07T01:10:50.650 回答