首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正确的语境

正确的语境
EN

Stack Overflow用户
提问于 2013-11-04 18:49:54
回答 1查看 70关注 0票数 0

我想从许多片段布局中使用这个MediaPlayer方法。

如何解析原始资源?

代码语言:javascript
复制
public void playSound(Uri path) throws IOException{
    MediaPlayer player;
    player = new MediaPlayer();
    try {
        player.setDataSource(path.getPath(), path);
    } catch (IOException e) {
        e.printStackTrace(); 
    } catch (IllegalArgumentException e) {
        e.printStackTrace();  
    } catch (SecurityException e) {
        e.printStackTrace();  
    } catch (IllegalStateException e) {
        e.printStackTrace();  
    }
    player.prepare();
    player.start();
    player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        public void onCompletion(MediaPlayer mp){
            mp.release();
        }
    });
}

我目前正在使用我的片段中的这个来解析原始目录中的mp3文件。

代码语言:javascript
复制
Btn_shou.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {

                Uri path = null;

                switch (tone.getCheckedRadioButtonId())
                {
                    case R.id.radioTone1:

                        path = Uri.parse("android.resource://" +getActivity().getApplicationContext().getPackageName() +"/"+R.raw.shou1);
                        try {
                            playSound(path);
                        } catch (IOException e) {
                            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                        }
                        break;

“路径”变量有一个问题。安卓抱怨它找不到mp3文件。

最后,我通过以下方式解决了这一问题:

  1. 创建独立的MediaPlayer类。 包com.example.FragmentTabsTutorial;导入android.content.Context;导入android.media.MediaPlayer;导入android.net.Uri;导入java.io.IOException;公共类plaSnd {公共无效playSound(Uri路径,上下文上下文)抛出IOException { MediaPlayer player;player =新MediaPlayer();尝试{player.setDataSource(上下文,路径);} catch (IOException e) { e.printStackTrace();} catch (IllegalArgumentException e) { e.printStackTrace();} catch (SecurityException e) { e.printStackTrace();} catch (IllegalStateException e) { e.printStackTrace();} player.prepare();player.start();player.setOnCompletionListener(新MediaPlayer.OnCompletionListener() ){公共MediaPlayer.OnCompletionListener(MediaPlayer mp) { mp.release();}}; }

2.)在我的片段中,我为plaSnd()类创建了一个对象:

代码语言:javascript
复制
 final plaSnd pla = new plaSnd();

3.)创建一个用于存储上下文的变量:

代码语言:javascript
复制
final Context context = getActivity().getApplicationContext();

4.)根据单击的按钮设置路径变量,然后将“上下文”和“路径”解析为“plaSnd”类中的plaSnd()方法:

代码语言:javascript
复制
 Btn_o.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {

            Uri path = null;

            switch (tone.getCheckedRadioButtonId())
            {
                case R.id.radioTone1:

                    path = Uri.parse("android.resource://" +getActivity().getApplicationContext().getPackageName() +"/"+R.raw.o1);

                    try {
                        pla.playSound(path, context);
                    } catch (IOException e) {
                        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                    }

                    break;

这对我很管用,不过我肯定有更好的解决办法.

EN

回答 1

Stack Overflow用户

发布于 2013-11-04 18:55:50

试着替换这个:

代码语言:javascript
复制
player = new MediaPlayer();

在这方面:

代码语言:javascript
复制
// context should be any context, e.g. your activity or getApplicationContext()
player = MediaPlayer.create(context, R.raw.shou1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19774867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档