Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >安卓MP3播放器,播放/暂停按钮不工作

安卓MP3播放器,播放/暂停按钮不工作
EN

Stack Overflow用户
提问于 2018-09-29 21:45:58
回答 1查看 394关注 0票数 0

我正在跟随Udemy的课程来制作一个像Spotify这样的MP3播放器。我是Android studio的新手,对此知之甚少。这个类有点老,而且使用的是2年前的Android Studio的旧版本,所以这可能是问题的一部分。当我第一次开始调试时,我可以听到MP3的声音,按钮也会从播放切换到暂停,但是,它对任何点击都没有反应。我听到它被点击的声音,但它不会改变状态或暂停音频。谢谢你的帮助,非常感谢!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    ***************** Main Activity.java ************************

package live.regionradio.regionradio;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.media.MediaPlayer;
import java.io.IOException;
import android.media.AudioManager;


public class MainActivity extends AppCompatActivity {

    static FloatingActionButton btnPlayPause;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        btnPlayPause = (FloatingActionButton) findViewById(R.id.fab);
        btnPlayPause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });

        String url = "https://ia802508.us.archive.org/5/items/testmp3testfile/mpthreetest.mp3";
        if (Player.player == null)
            new Player();
        Player.player.playStream(url);
    }

    public static void flipPlayPauseButton (boolean isPlaying) {
        if (isPlaying) {
            btnPlayPause.setImageResource(android.R.drawable.ic_media_pause);
        }
        else {
            btnPlayPause.setImageResource(android.R.drawable.ic_media_play);
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
      }


    }

***************** Player.java ************************

    package live.regionradio.regionradio;
    import android.media.MediaPlayer;
    import android.media.AudioManager;
    import android.util.Log;
    import java.io.IOException;


    public class Player {

        MediaPlayer mediaPlayer = new MediaPlayer();
        public static Player player;
        String url = "";

        public Player() {
            this.player = this;
        }

        public void playStream(String url) {
            if (mediaPlayer != null) {
                try {
                    mediaPlayer.stop();
                } catch (Exception e) {

                }
                mediaPlayer = null;
            }

            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mediaPlayer.setDataSource(url);
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    private MediaPlayer mp;


                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        this.mp = mp;
                        playPlayer();
                    }
                });
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    private MediaPlayer mp;

                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        this.mp = mp;
                        MainActivity.flipPlayPauseButton(false);
                    }
                });
                mediaPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        public void pausePlayer () {
            try {
                mediaPlayer.pause();
                MainActivity.flipPlayPauseButton(false);
            }
            catch (Exception e) {
                Log.d("EXCEPTION", "Failed to pause media player.");
            }
        }

        public void playPlayer () {
            try {
                mediaPlayer.start();
                MainActivity.flipPlayPauseButton(true);
            }
            catch (Exception e) {
                Log.d("EXCEPTION", "Failed to play media player.");
            }
        }

        public void togglePlayer () {
            try  {
                if (mediaPlayer.isPlaying())
                    pausePlayer();
                else
                    playPlayer();
            }
            catch   (Exception e){
                Log.d("Exception", "failed to toggle media player.");
            }
        }

    }
EN

回答 1

Stack Overflow用户

发布于 2018-09-29 21:49:24

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void onClick(View view) {

        }

我相信这正是你点击按钮后会发生的事情,也就是-什么都没有。你应该把一些东西放在这个函数里面。您覆盖了onClick函数并将其保留为空,因此您希望在单击之后发生的任何事情都应该放入其中。

您的"togglePlayer()“永远不会被使用,也许这就是您应该放在侦听器中的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52572813

复制
相关文章
水水的周赛,水水的心情
实际上,我们是把所有的最大值全部变成次大值,再把次大值变为次次大值,循环往复,直到所有的值都变成最小值
ACM算法日常
2021/06/16
6370
水水的周赛,水水的心情
/undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
使用 <link rel="stylesheet" href="https://layui.hcwl520.com.cn/layui-v2.5.4/css/layui.css" media="al
Happyjava
2019/07/16
6.1K0
/undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
/undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
使用 "stylesheet" href="https://layui.hcwl520.com.cn/layui-v2.5.4/css/layui.css" media="all"> 引入lay
Happyjava
2020/10/16
1.3K0
/undefinedcss/modules/layer/default/layer.css?v=3.1.1找不到的问题
hdoj 1202 水水更健康
传送门 没写的了 就随便写写,这是一道大大的水题,wa了两次 ,太丢人了!!!! #include<stdio.h> double fun(double x) { if(x >= 90 && x <= 100) return 4; else if(x >= 80 && x <90) return 3; else if(x >= 70 && x < 80) return 2; else if(x >= 60 && x < 70) return 1; else return 0;
xindoo
2021/01/22
3070
装水的容器大全_盛水的容器什么最好
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
全栈程序员站长
2022/09/22
2570
水哥的代码
本文最后更新于 769 天前,其中的信息可能已经有所发展或是发生改变。 学习下大佬的代码风格 image.png Post Views: 467
Yuyy
2022/06/28
2360
水哥的代码
御水而行,点水成金
濒临秃头运维组     萌新小运维 小Q同学,数据中心暖通系统通常有哪些节能措施呢? 小Q同学 哈哈。常见的措施有提高冷冻水温度、降低冷却水温度、降低水泵和风机的运行频率等。     萌新小运维 以上的方法或多或少都听说过,但是大都是定性分析。至于每种方法具体可以节能多少?是否会按下葫芦起了瓢呢? 小Q同学 其实以上每一项措施背后都有强大的理论依据支撑。这样吧,今天我们通过定量分析来验证冷冻水泵变频运行的节能可行性吧。 ╮( ̄▽ ̄"")╭ 01 水泵频率、流量、扬程、功
腾讯数据中心
2020/06/22
2K0
一个水水的Java GUI聊天室!!!
好久都没更新了!原计划今天本应该更新HashMap的,结果我没写完!!!再拖更一下吧,毕竟算是个内容比较全些的内容。其实这些天也没都在玩,花了一个星期的晚上时间弄了一个聊天室作业,具体的功能有添加好友,收发消息、图片、文件。
东边的大西瓜
2022/05/05
3010
一个水水的Java GUI聊天室!!!
【水水水文章】用 Python 发邮件
青柠大佬在寒假写了一个每日推兽图的项目, 我突发奇想,通过py爬虫,自动将图发送到邮箱,
土土
2022/09/26
2720
[每日一题]山?水!
今天的题解让我们从一个一位老禅师和话引出: 青源惟信禅师讲到自己修佛悟道的历程时说:“老僧三十年前来参禅时,见山是山,见水是水;及至后来亲见知识,有个入处,见山不是山,见水不是水;而今得个体歇处,依然见山还是山,见水还是水。” 或许你现在还看不出这段话和我们今天的题有什么联系,又或许你已经看出了其中的端瑞,那么就让我们赶紧步入正题,来看看我们今天的题目(1073:弟弟的作业) 题目描述 你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为a+b=c或
编程范 源代码公司
2018/04/18
6100
[每日一题]山?水!
盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
木子星兮
2020/07/17
3830
盛最多水的容器
盛水最多的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
看、未来
2022/05/06
3980
盛水最多的容器
盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
用户3519280
2023/07/08
1400
HTML和CSS
Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
李才哥
2019/07/10
5.4K0
盛最多水的容器
                                         S(i,j)=min(h[i],h[j])×(j−i)
狼啸风云
2023/10/19
1390
盛最多水的容器
【两天完成简书搬家】——第一天,NodeJS爬取简书数据
简书遵循“简单书写”的原则,限制了我的一些想法,比如我想添加个背景音乐,又或者想添加个表情,或做个分类查询等,此外我有一个放杂物的网站空间,放着浪费了,所以就打算建设自己的空间。 当然不是因为那个“饱醉豚”事件,在它越演越烈之前,我就看到那篇争议的文章,顺便看了他几篇文章,我一笑置之,与一个哗众取宠、低智商低情商、毫无论据,甚至毫无文笔的生物有啥好计较的?只是没想到关注的几个人,鉴于简书及简书CEO的态度都纷纷清空简书,叹哉!不过也可以理解一下,一个签约作者写这样的文章居然还能得到简叔的支持:
IT晴天
2018/08/20
9440
【两天完成简书搬家】——第一天,NodeJS爬取简书数据
LeetCode - 盛最多水的容器
LeetCode第11题,难度中等,严重怀疑该题在英文版里是不是第11题,一点印象都没有.
晓痴
2019/09/19
3970
LeetCode - 盛最多水的容器
水题 ZOJ
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
5460
点击加载更多

相似问题

如何在加载时自动调整文本区域元素的大小?

234

JS -如何根据从其他文本区域输入镜像的输入文本自动调整文本区域的大小?

21

自动调整文本区域大小

10

动态输入文本后自动调整文本区域字段的大小

21

自动调整文本区域的大小?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文