Android Studio学写英语听写APP(音乐播放器)一

最近迷上了AndroidAPP,看了点资料就边学边写,只是打发时间的个人爱好,工具为Android Studio3.0.1,为了偷懒,准备给孩子写个听写APP,思路是到时候从APP下载音频资源包到SD卡,APP播放直接读取储存路径下的音频,不用从Android自带的媒体库读取(因为还不会遍历…)。先弄个最简单的指定路径播放和APP资源里MP3播放。

APP资源里MP3播放

yes.mp3
XML 略,
java代码:

//通过create()方法设置数据源,则不能写mediaPlayer.prepare()方法
        final MediaPlayer mp =MediaPlayer.create(this, R.raw.yes);
        //为按钮play添加监听事件
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();
                Log.v("0001","Main01");
            }
        });

播放指定路径的MP3

使用的Genymotion模拟器,这是拷贝的MP3文件
在这里插入图片描述
代码中用setDataSource指定路径时就要用这个路径,

mp.setDataSource("/storage/emulated/0/mp3/002.mp3")

在Android Device Monitor中看这个路径为:/mnt/shell/emulated/0/mp3/001.mp3 用这个路径是不能找到音频的,但是我用真机时,用Android Device Monitor中的实际地址能找到音频文件,不懂。
XML就是3个功能键,下面直接上java代码:

public class bao_cun extends AppCompatActivity {
    /**
     * Isstart 为播放状态变量,0为停止,1为播放,2为暂停
     * currentPlayPosition 为记录暂停时的播放时间变量,继续播放时从这个变量时间开始播放。
     */
    //实例化MediaPlayer,并设定静态变量 mp
    private MediaPlayer mp = new MediaPlayer();
    public static MediaPlayer playe = null;
    //播放状态
    private int Isstart  = 0;
    //音乐暂停后读取标记变量
    private int currentPlayPosition;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //注册XML
        setContentView(R.layout.activity_bao_cun);

        TextView fanHui = (TextView) findViewById(R.id.fanHui_01);
        Button sd_boFang = (Button) findViewById(R.id.sD_bofang);
        Button sd_tingZhi = (Button) findViewById(R.id.sD_tingZhi);
        Button sd_zanTing = (Button) findViewById(R.id.sD_zanTing);

        //返回前一页
        fanHui.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(bao_cun.this, MainActivity.class);
                startActivity(intent);
            }
        });

        //暂停
        sd_zanTing.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(Isstart == 1){
                    //isPlaying()返回 boolean,是否正在播放
                if(mp != null && mp.isPlaying()){
                    //记录暂停时的时间
                    currentPlayPosition = mp.getCurrentPosition();
                    mp.pause();
                    Isstart = 2;
                }}else {
                    //读取并跳至记录的暂停时的时间
                    mp.seekTo(currentPlayPosition);
                    mp.start();
                    Isstart = 1;
                }


            }
        });

        //停止
        sd_tingZhi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mp != null){
                    mp.stop();
                    mp.reset();
                    Isstart = 0;
                }
            }
        });

        //播放按钮监听
        sd_boFang.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             //  跳转
                kaibo1();
                //输出日志
                Log.v("0001","yunxing");
            }
        });


    }

    private void kaibo1() {
        //如果是停止状态就重新开始播放
        if(Isstart == 0) {
            //防错误处理
            try {
                //mp3实际地址(三星手机)
                // mp.setDataSource("/storage/extSdCard/001.mp3");
                //模拟器地址
                mp.setDataSource("/storage/emulated/0/mp3/002.mp3");
                //输出调试信息
                System.out.println("OK001");
                //prepare方法是将资源同步缓存到内存中,一般加载本地较小的资源可以用这个
                //通过create()方法设置数据源,则不能写mediaPlayer.prepare()方法
                mp.prepare();
                System.out.println("OK002");
                //开始播放
                mp.start();
                Isstart = 1;
                //错误类型
            } catch (IOException e) {
                //出现错误处理
                e.printStackTrace();
                System.out.println("OK003");
            }
            //如果是暂停就继续播放
        }else if(Isstart == 2){
            //读取并跳至记录的暂停时的时间
            mp.seekTo(currentPlayPosition);
            mp.start();
            Isstart = 1;
        }else {//在播放时就无动作
             }

    }



}

这里主要是借鉴了别人的代码,直通车:https://blog.csdn.net/u012156341/article/details/78979835
我其实就是把代码撸了遍,大概搞清了各自的作用。个人认为学东西在怎么看都没自己实际做一下来的快。

这里说明一下,近期学校老师要求听写就给孩子说汉语,让孩子写英文,所以这个APP就没必要写下去了。这会又把放了一段时间的8266弄出来折腾了。

猜你喜欢

转载自blog.csdn.net/oXingChenWuJi/article/details/82963032
今日推荐