【问题标题】:Issues playing audio/sound when pressing button in android studio在android studio中按下按钮时播放音频/声音的问题
【发布时间】:2017-01-13 08:09:41
【问题描述】:

Android 世界的新手,单击按钮时播放音频时遇到问题。它的有趣/奇怪的方面是相同的代码适用于我的 mainactivity,但不适用于我设置的 secondactivity。我正在使用与 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();
        }
    });
 }
 }

【问题讨论】:

  • 点击开始按钮有没有报错?
  • @Naz141 单击按钮时不会出现错误。单击按钮时没有任何反应,不会播放音频。

标签: java android android-studio button audio


【解决方案1】:

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

MediaPlayer 会消耗宝贵的系统资源。因此,您应该始终采取额外的预防措施,以确保您在 MediaPlayer 实例上挂起的时间不会超过必要的时间。完成后,您应该始终调用 release() 以确保分配给它的任何系统资源都被正确释放。例如,如果您正在使用 MediaPlayer,并且您的 Activity 收到对 onStop() 的调用,则必须释放 MediaPlayer,因为在您的 Activity 不与用户交互时按住它几乎没有意义(除非您正在播放背景中的媒体,这将在下一节中讨论)。当然,当您的活动恢复或重新启动时,您需要创建一个新的 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;
    }
}
}

第二活动

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 只有播放按钮。

【讨论】:

  • @Ahmad Yus,我尝试在 onClick 下创建它,同样的事情也发生在那里。 Mainactivity 那里没有媒体播放器,因为我在那个活动中不需要一个媒体播放器。现在我是否需要在 mainactivity 上启动 MediaPlayer,即使我不需要它?我只需要在 secondactivity 上使用它。
  • 哦!我以为你在 MainActivity 中有 MediaPlayer 实例。在这种情况下,您可以忘记 MainActivity 并尝试使用上面的 secondActivity。
  • 我尝试了上面的代码,但单击按钮时仍然没有播放音频。任何时候都不会给出错误。这很奇怪,因为当我在 mainactivity 上使用相同的代码只是为了测试它时它可以工作,而不是在第二个活动上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2014-11-02
  • 2015-05-01
相关资源
最近更新 更多