底层的驱动代码和相关的DTS文件都已经配置好了,开始实现应用的代码了,我们先来实现音乐播放器的基础功能。

实现一个音乐播放器,可以直接扫描板子上的所有音乐并列出歌曲清单,同时可以控制进行音乐播放、停止、上一首、下一首。

public class MainActivity extends Activity implements View.OnClickListener {private Button puase, stop, last, next;private RadioButton start;private ListView listView;private TextView totle, current_time;private SeekBar progressBar;public final static int PLAY = 1;public final static int STOP = 2;public final static int NEXT = 3;public final static int LAST = 4;private ArrayList<String> save;private PlayMusicBackgoundService service;private ServiceConnection connection;private boolean isstart = true;private Timer timer;private int onplay = 0;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {SimpleDateFormat format = new SimpleDateFormat("mm:ss");progressBar.setMax(msg.arg1);progressBar.setProgress(msg.arg2);totle.setText(format.format(msg.arg1));current_time.setText(format.format(msg.arg2));}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initvariable();request();timer = new Timer();scanFile();}private void request() {requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 1);}private void initvariable() {start = findViewById(R.id.start);last = findViewById(R.id.last);next = findViewById(R.id.next);listView = findViewById(R.id.music);totle = findViewById(R.id.count_time);current_time = findViewById(R.id.current_time);progressBar = findViewById(R.id.advance);start.setOnClickListener(this);last.setOnClickListener(this);next.setOnClickListener(this);save = new ArrayList<>();Intent intent = new Intent();intent.setAction("android.intent.action.BUND");intent.setPackage("com.thundersoft.boardapk");intent.putExtra("all", save);connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {service = (PlayMusicBackgoundService) ((PlayMusicBackgoundService.MyServices) iBinder).getServices();}@Overridepublic void onServiceDisconnected(ComponentName componentName) {}};bindService(intent, connection, BIND_AUTO_CREATE);}private void scanFile() {save.removeAll(save);String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Song";File file = new File(path);for (File file1 : file.listFiles()) {if (file1.getName().endsWith(".mp3")) {save.add(file1.getName());}}ListAdapter adapter = new ListAdapter(save, this);listView.setAdapter(adapter);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.start:if (isstart) {start.setText("Pause");isstart = false;}break;case R.id.last:if (onplay == 0) {action(LAST, save.get(save.size() - 1));onplay=save.size() - 1;} else {Log.i("LAST",onplay+"");action(LAST, save.get(onplay -1));onplay=onplay-1;}getdataback();start.setText("Pause");isstart=false;break;case R.id.next:if (onplay == (save.size() - 1)) {action(NEXT, save.get(0));onplay=0;Log.i("onlpay",""+onplay);} else {action(NEXT, save.get(onplay + 1));onplay=onplay+1;}getdataback();start.setText("Pause");isstart=false;break;}}private void getdataback() {service.setCallback(new PlayMusicBackgoundService.Callback() {@Overridepublic void get(int time, int current) {Message message = new Message();message.arg1 = time;message.arg2 = current;handler.sendMessage(message);Log.i("FUCK", "PLAY");}});}public void action(int action, String path) {Intent intent = new Intent(this, PlayMusicBackgoundService.class);intent.putExtra("action", action);intent.putExtra("path", path);startService(intent);}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == 1) {scanFile();}}@Overrideprotected void onDestroy() {super.onDestroy();unbindService(connection);}}

再来实现音乐播放器的后台播放功能

public class PlayMusicBackgoundService extends Service {private MediaPlayer mediaPlayer;private boolean isStop = true;private Callback callback;private Handler handler;private int current, count;public boolean ispause = false;private Timer timer;public ArrayList<String> list;public void setCallback(Callback callback) {this.callback = callback;}@Overridepublic IBinder onBind(Intent intent) {list=intent.getStringArrayListExtra("all");return new MyServices();}@Overridepublic void onCreate() {super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {if (intent != null) {int action = intent.getIntExtra("action", 0);switch (action) {case MainActivity.PLAY:if (isStop) {if (!ispause) {mediaPlayer = MediaPlayer.create(this, Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + "/Song/" + intent.getStringExtra("path")));}Log.i("Media", mediaPlayer + "");timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {count = mediaPlayer.getDuration();current = mediaPlayer.getCurrentPosition();callback.get(count, current);}}, 0, 1000);mediaPlayer.start();isStop = false;} else if (!isStop && mediaPlayer.isPlaying() && mediaPlayer != null) {timer.cancel();mediaPlayer.pause();isStop = true;ispause = true;}break;case MainActivity.STOP:if (!isStop) {mediaPlayer.stop();mediaPlayer.release();isStop = true;}break;case MainActivity.NEXT:if (mediaPlayer!=null){mediaPlayer.reset();mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}mediaPlayer=MediaPlayer.create(this,Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + "/Song/" + intent.getStringExtra("path")));Log.i("NEXT",intent.getStringExtra("path"));mediaPlayer.start();Timer timenext = new Timer();timenext.schedule(new TimerTask() {@Overridepublic void run() {Log.i("MEDIA",mediaPlayer+"");count = mediaPlayer.getDuration();current = mediaPlayer.getCurrentPosition();callback.get(count, current);}}, 0, 1000);isStop=false;break;case MainActivity.LAST:if (mediaPlayer!=null){mediaPlayer.reset();mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}mediaPlayer=MediaPlayer.create(this,Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath() + "/Song/" + intent.getStringExtra("path")));Log.i("LAST",intent.getStringExtra("path"));mediaPlayer.start();Timer timelast = new Timer();timelast.schedule(new TimerTask() {@Overridepublic void run() {count = mediaPlayer.getDuration();current = mediaPlayer.getCurrentPosition();callback.get(count, current);}}, 0, 1000);isStop=false;break;}}return super.onStartCommand(intent, flags, startId);}public class MyServices extends Binder {public Service getServices() {return PlayMusicBackgoundService.this;}}public interface Callback {public void get(int time, int current);}}

基于Dragonboard410c的智能音箱(四)相关推荐

  1. 基于Dragonboard410c的智能音箱(一)

    一.简介 主要是基于DragonBoard™410c开发的可以与用户简单语音交互的智能音箱设备.智能音箱在基础音乐播放的功能上,用户可以用语音控制音乐的播放.停止和切换歌曲. 二.语音识别 语音识别技 ...

  2. 智能音箱场景下的性能优化

    QCon是由InfoQ主办的综合性技术盛会,今年是Qcon举办的第10个年头,半吊子全栈工匠有幸作为演讲嘉宾分享一个近两年来的实践经验--智能音箱场景下的性能优化,隶属于曾波老师出品的"场景 ...

  3. 智能音箱硬件和软件介绍[上] 硬件结构解析[Soomal]

    科大讯飞 VBOX 智能音箱 - 电路板 Google 谷歌 Google Home 智能音箱 从2014年起,我们先后通过自购和合作厂商获得多个智能语音识别"流派"的品牌音箱产品 ...

  4. get荣耀YOYO智能音箱打电话的新技能 感觉赚了1个亿

    荣耀YOYO智能音箱自发布以来受到众多消费者的青睐.它能免费打电话的技能也让很多消费者好奇:智能音箱怎么打电话?今天,荣耀发布了打电话视频教程,详细介绍了荣耀YOYO智能音箱四种通话模式.手把手教你用 ...

  5. “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制

    "物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...

  6. 基于 QPlay 的智能无线流媒体传输音箱的设计

    基于 QPlay 的智能无线流媒体传输音箱的设计 系统总体架构 QPlay音箱设备主要工作流程如图所示.由于采用libupnp作为UPnP SDK进行开发,所以程序开始时需要初始化UPnP SDK. ...

  7. a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光

    不得不说,智能音箱已经成为目前重要的科技品类之一,许多公司包括亚马逊.谷歌.苹果.阿里巴巴.小米等等,都在大举进军智能音箱市场. 为了尽可能为更多产品提供核心原件,近日,高通公司推出了一款全新的SOC ...

  8. 物联网技术周报第 103 期: DIY 智能音箱:基于 Raspberry Pi + Snowboy + AVS

    新闻 \\ \ <设计缺陷将导致亚马逊Echo变身成为监听设备>MWR的安全研究专家发现亚马逊Echo存在一个物理攻击漏洞,该漏洞将允许攻击者获得设备的root shell,然后安装恶意软 ...

  9. 基于 QPlay 的智能无线流媒体传输音箱的功能实现

    基于 QPlay 的智能无线流媒体传输音箱的功能实现 系统核心功能模块 系统需要实现的核心功能有QPlay认证功能,QPlay队列功能,设备离线功能,歌曲播放功能. QPlay认证功能模块 QPlay ...

最新文章

  1. 这个插件竟打通了Python和Excel,还能自动生成代码!
  2. Centos7 安装redis
  3. .NET Compact Framework 2.0 SP2 for Platform Builder (4.2, 5.0, 6.0)
  4. mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法
  5. 玩转Jquery中的动画效果(animate方法)
  6. 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
  7. 张朝阳直播做饭上演“吃播”,“Charles的好物分享”探索带货形式新边界
  8. ARP-地址解析协议
  9. abi-compliance-checker 理解
  10. C语言pow 函数的总结:
  11. C# 很少人知道的科技
  12. 李瑞霖4.13黄金走势短线放空原油能否筑底反弹?行情涨跌分析
  13. Python使用PuLP第三方库解决线性规划问题
  14. 旅行社如何通过抖音短视频获客?
  15. 精品课程申报系统实战开发代码全纪录
  16. Qt之加载百度离线地图(WebKit和WebEngine)
  17. vue实战记录(六)- vue实现购物车功能之地址列表选配
  18. 什么是DHCP(接口模式+全局模式)
  19. 2020CVPR人体姿态估计论文盘点
  20. 傍上在线教育的“大腿”,平板电脑未来可期?

热门文章

  1. scrapy html页面加载未完成,Scrapy与scrapy-splash框架快速加载js页面
  2. TabLayout使用介绍
  3. Unity双人坦克大战竞速游戏,超简单教学
  4. J-Flash 读取Flash数据
  5. NO.6网工学习之QINQ
  6. android如何切换主题背景图片,安卓怎么更换主题 安卓手机更换壁纸与主题教程...
  7. [Java并发包学习]深度剖析ConcurrentHashMap
  8. Python3自然语言处理(3)——WordNet
  9. opencv3/C++ SURF特征检测
  10. 163VIP邮箱如何注册?163VIP企业邮箱申请介绍!