簡體   English   中英

在Android Studio中按下按鈕時播放音頻/聲音問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM