对于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();
}
});
}
}
答案 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只有播放按钮。