Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Android在点击按钮时播放声音_Java_Android_Button_Android Mediaplayer - Fatal编程技术网

Java 使用Android在点击按钮时播放声音

Java 使用Android在点击按钮时播放声音,java,android,button,android-mediaplayer,Java,Android,Button,Android Mediaplayer,我知道这个问题有一千种不同的版本被问过,我已经看了一遍并尝试了这些建议,但没有一个有效。我试图在点击按钮时播放声音,同时在屏幕上显示新文本。当我按下按钮时,我可以切换文本,但声音永远不会播放。这是我的代码: public class MainActivity extends Activity { Button button; TextView text; final MediaPlayer mp = new MediaPlayer(); @Override protected void on

我知道这个问题有一千种不同的版本被问过,我已经看了一遍并尝试了这些建议,但没有一个有效。我试图在点击按钮时播放声音,同时在屏幕上显示新文本。当我按下按钮时,我可以切换文本,但声音永远不会播放。这是我的代码:

public class MainActivity extends Activity {

Button button;
TextView text;
final MediaPlayer mp = new MediaPlayer();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);
    text = (TextView) findViewById(R.id.answer);

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                AssetFileDescriptor afd;
                afd = getAssets().openFd("myaudio.mp3");
                mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                mp.prepare();
                mp.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            toggleString(v);
        }
    });
}

public void toggleString(View v) {
    if(text.getText().toString().equals(getString(R.string.nothing)))
        text.setText(R.string.answer);
    else
        text.setText(R.string.nothing);
}
这是我的活动xml文件:

<TextView
    android:id="@+id/answer"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="@string/nothing"
    android:textSize="40sp"
    android:layout_marginTop="40dp"
    />

<Button
    android:id="@+id/button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="130dp"
    android:onClick="onClick"
    android:text="@string/question" 
    />

您必须一次性设置数据源并准备媒体播放器

试试这个:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);
    text = (TextView) findViewById(R.id.answer);

    AssetFileDescriptor afd;
    try {
        afd = getAssets().openFd("myaudio.mp3");
        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
        mp.prepare();
    } catch (IOException e1) {
        e1.printStackTrace();
    }


     button.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
        try {     
            mp.start();

        } catch (IllegalStateException e) {
            e.printStackTrace();
            }
        }
    });


}

您必须一次性设置数据源并准备媒体播放器

试试这个:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);
    text = (TextView) findViewById(R.id.answer);

    AssetFileDescriptor afd;
    try {
        afd = getAssets().openFd("myaudio.mp3");
        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
        mp.prepare();
    } catch (IOException e1) {
        e1.printStackTrace();
    }


     button.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
        try {     
            mp.start();

        } catch (IllegalStateException e) {
            e.printStackTrace();
            }
        }
    });


}
尝试将声音文件保存在原始文件夹中,并在活动中调用MediaPlayer.create,而不是资源。在上面的示例中,原始文件夹中的声音文件名为blop



尝试将声音文件保存在原始文件夹中,并在活动中调用MediaPlayer.create,而不是资源。在上面的示例中,原始文件夹中的声音文件名为blop

捕获中是否发生错误?张贴您在尝试播放声音时收到的printStackTrace。我将看到的内容添加到帖子末尾,这是因为创建失败。它永远不会进入准备状态。您在尝试播放时仍处于初始状态。我问你第一次尝试的打印堆栈是什么。我不知道打印堆栈是什么,但我希望我刚刚编辑的是它。我想是的。第一个建议是正确的。如果它不工作,您的myaudio.mp3可能在错误的位置。或者您设备上的音量一直被调低。请看第一条建议中的第一个尝试捕捉。您可以看到e1.printStackTrace();这允许您的程序不会崩溃,但如果出现错误,则在log Cat中输出错误。我想应该是红色的。渔获量有错误吗?张贴您在尝试播放声音时收到的printStackTrace。我将看到的内容添加到帖子末尾,这是因为创建失败。它永远不会进入准备状态。您在尝试播放时仍处于初始状态。我问你第一次尝试的打印堆栈是什么。我不知道打印堆栈是什么,但我希望我刚刚编辑的是它。我想是的。第一个建议是正确的。如果它不工作,您的myaudio.mp3可能在错误的位置。或者您设备上的音量一直被调低。请看第一条建议中的第一个尝试捕捉。您可以看到e1.printStackTrace();这允许您的程序不会崩溃,但如果出现错误,则在log Cat中输出错误。我相信它应该是红色的。我试过了,但现在我得到了我在原始帖子末尾添加的错误。你在使用模拟器吗?我是,但后来我开始使用我的手机(Galaxy S4)我试过了,但现在我发现了我在原始帖子末尾添加的错误。你在使用模拟器吗?我是,但后来我开始使用我的手机(Galaxy S4)。起初我实际上有类似的东西,因为我把mp3文件放在一个原始文件夹中,但它仍然无法工作。有了它,应用程序就不会打开了……起初我实际上有类似的东西,因为我把mp3文件放在一个原始文件夹中,但它仍然无法工作。有了这个,应用程序就不会打开了。。。
#import android.media.MediaPlayer;

public class MainActivity extends Activity {

MediaPlayer mySound;
@override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
mySound = MediaPlayer.create(MainActivity.this, R.raw.blop);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        try {
            mySound.start();
        } catch (NullPointerException e) {
            mySound = MediaPlayer.create(MainActivity.this, R.raw.blop);
            /* Optional */ // mySound.start();
        }
        toggleString(v);
    }
});
}