【问题标题】:Playing a sound when button clicking in Android在Android中单击按钮时播放声音
【发布时间】:2012-07-07 10:58:00
【问题描述】:

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

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

【问题讨论】:

  • 你可能想调用像MusicManager.getInstance().play(this, R.raw.my_sound); 这样简单的东西。为此,您需要正确的资源管理。您可以为此使用轻量级库:github.com/delight-im/Android-Audio

标签: android eclipse eclipse-adt


【解决方案1】:

您应该将代码放在 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.");
}

【讨论】:

    【解决方案2】:

    这行不通的原因很简单:从未调用过 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;
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多