在android studio中按下按钮时播放音频/声音的问题

时间:2016-09-06 01:11:59

标签: java android android-studio button audio

对于Android世界来说很新,我在点击按钮时播放音频时遇到问题。它的有趣/奇怪的方面是相同的代码对我的主要活动起作用,但不是我设置的第二个活动。我使用的是与mainactivity相同的完全相同的代码。我在mainactivity上使用该代码只是为了测试它,请记住在mainactivity中没有声明或定义媒体播放器。我这样做只是为了测试代码是否有效。

这是我的xml:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginTop="15sp"
    android:layout_marginBottom="15sp" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="press button to play audio"
        android:textSize="40sp"
        android:textColor="#ffff"
        android:fontFamily="cursive"
        android:textStyle="bold"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"

        />


</LinearLayout>
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginBottom="10sp"
    android:layout_gravity="center"

    >


    <Button
        android:id="@+id/AudioButton"
        android:layout_width="wrap_content"
        android:layout_height="50sp"
        android:text="play"
        android:textSize="22sp"
        android:textColor="#ffff"
        android:layout_marginRight="10dp"




        />

</LinearLayout>

这是JAVA:

package nameiscleared;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class SecondActivity extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    Button start = (Button) findViewById(R.id.AudioButton);




    start.setOnClickListener(new View.OnClickListener() {
        MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.audioname);

        @Override
        public void onClick(View view) {


            mp.start();
        }
    });
 }
 }

1 个答案:

答案 0 :(得分:0)

这只是我的假设,我认为你在MainActivity中使用它时不会发布MediaPlayer。这就是为什么它没有在secondActivity上工作。另一个错误是MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.audioname);需要在onClick上,而不是在View.OnClickListener()括号中。您需要记住,使用MediaPlayer后,需要在不再使用时释放它。

  

MediaPlayer可以占用宝贵的系统资源。因此,您应该始终采取额外的预防措施,以确保您没有超过必要的时间挂在MediaPlayer实例上。完成后,应始终调用release()以确保分配给它的任何系统资源都已正确释放。例如,如果您正在使用MediaPlayer并且您的活动接收到对onStop()的调用,则必须释放MediaPlayer,因为在您的活动未与用户交互时保持它是没有意义的(除非您正在玩媒体在后台,将在下一节讨论)。当您的活动恢复或重新启动时,您需要创建一个新的MediaPlayer并在重新开始播放之前再次准备它 - Android Developers documentation

正确的实现应该是这样的;

<强> MainActivity

public class MainActivity extends AppCompatActivity{

private Button playBtn, startActivityBtn;
private MediaPlayer mediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    playBtn = (Button)findViewById(R.id.playBtn);
    playBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mediaPlayer = MediaPlayer.create(MainActivity.this, Settings.System.DEFAULT_RINGTONE_URI);
            mediaPlayer.start();
        }
    });

    startActivityBtn = (Button)findViewById(R.id.startActivity);
    startActivityBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            startActivity(intent);
        }
    });
}

@Override
protected void onStop() {
    super.onStop();

    if(null != mediaPlayer){

        if(mediaPlayer.isPlaying())
            mediaPlayer.stop();

        mediaPlayer.release();
        mediaPlayer = null;
    }
}
}

<强> SecondActivity

public class SecondActivity extends AppCompatActivity {

private Button playBtn;
private MediaPlayer mediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_econd);

    playBtn = (Button)findViewById(R.id.playBtn);
    playBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mediaPlayer = MediaPlayer.create(SecondActivity.this, Settings.System.DEFAULT_RINGTONE_URI);
            mediaPlayer.start();
        }
    });

}

@Override
protected void onStop() {
    super.onStop();

    if(null != mediaPlayer){
        if(mediaPlayer.isPlaying())
            mediaPlayer.stop();

        mediaPlayer.release();
        mediaPlayer = null;
    }
}
}

我不包括布局,因为两个布局都非常简单。 MainActivity有两个按钮,可以播放和启动另一个活动。 SecondActivity只有播放按钮。