[英]Issues playing audio/sound when pressing button in android studio
對於android world來說是很新的東西,單擊按鈕時播放音頻時出現問題。 它的有趣/怪異的方面是相同的代碼對我的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();
}
});
}
}
只是我的假設,我認為您在MainActivity中使用MediaPlayer時不會釋放它。 這就是為什么它不能在secondActivity上運行的原因。 另一個錯誤是, MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.audioname);
需要放在onClick中,而不是在View.OnClickListener()
。 您需要記住,在使用MediaPlayer之后,需要在不再使用它時將其釋放。
MediaPlayer會消耗寶貴的系統資源。 因此,您應該始終采取額外的預防措施,以確保您掛接到MediaPlayer實例的時間不會超過必要的時間。 完成后,您應該始終調用release()以確保分配給它的所有系統資源都已正確釋放。 例如,如果您使用的是MediaPlayer,並且您的活動收到了對onStop()的調用,則必須釋放MediaPlayer,因為在您的活動與用戶不進行交互時(除非您正在播放),堅持使用MediaPlayer幾乎沒有意義。媒體(在下一節中討論)。 當然,恢復或重新開始活動后,您需要先創建一個新的MediaPlayer並重新進行准備,然后才能繼續播放-Android Developers文檔 。
正確的實現應該是這樣的;
主要活動
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只有播放按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.