我正试图点按一下按钮播放声音。 最初声音是在敲击时播放的,但在反复敲击按钮后,声音不再播放。 所有必需的文件都放在相应的文件夹中。
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<Button
android:id="@+id/one"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_row="0"
android:layout_rowWeight="1"
android:background="@drawable/one"
android:onClick="tapped"
android:tag="0"
android:text="@string/one"
tools:text="@string/one" />
<Button
android:id="@+id/two"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_row="0"
android:layout_rowWeight="1"
android:background="@drawable/two"
android:onClick="tapped"
android:tag="1"
android:text="@string/two"
tools:text="@string/two" />
</GridLayout>
这是我现在所做的,
public class MainActivity extends AppCompatActivity {
int myMusic[] = {R.raw.one,R.raw.two};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void tapped ( final View view){
Button buttonVar = (Button) view;
int tagNo;
tagNo = Integer.parseInt(buttonVar.getTag().toString());
MediaPlayer sound = MediaPlayer.create(this, myMusic[tagNo]);
sound.start();
答案 0 :(得分:2)
发布您的媒体播放器。 您正在创建多个媒体播放器实例并导致问题。
使用 -
sound.release();
答案 1 :(得分:0)
除了sourabh的答案(发布使用过的MediaPlayer),要正确实现多线程(如问题所示),您需要将一个runnable提交到ThreadPool中。
Google / Android提供了下面链接的ExecutorService文档,您可以按照这些文档了解如何在新线程上运行代码块。
请注意,因为在运行异步时,您仍然可以重复播放(除非未处理),因为将启动多个音频源(每个提交的线程一个)。
https://developer.android.com/reference/java/util/concurrent/ExecutorService.html