基于Dragonboard410c的智能音箱(四)
底层的驱动代码和相关的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的智能音箱(四)相关推荐
- 基于Dragonboard410c的智能音箱(一)
一.简介 主要是基于DragonBoard™410c开发的可以与用户简单语音交互的智能音箱设备.智能音箱在基础音乐播放的功能上,用户可以用语音控制音乐的播放.停止和切换歌曲. 二.语音识别 语音识别技 ...
- 智能音箱场景下的性能优化
QCon是由InfoQ主办的综合性技术盛会,今年是Qcon举办的第10个年头,半吊子全栈工匠有幸作为演讲嘉宾分享一个近两年来的实践经验--智能音箱场景下的性能优化,隶属于曾波老师出品的"场景 ...
- 智能音箱硬件和软件介绍[上] 硬件结构解析[Soomal]
科大讯飞 VBOX 智能音箱 - 电路板 Google 谷歌 Google Home 智能音箱 从2014年起,我们先后通过自购和合作厂商获得多个智能语音识别"流派"的品牌音箱产品 ...
- get荣耀YOYO智能音箱打电话的新技能 感觉赚了1个亿
荣耀YOYO智能音箱自发布以来受到众多消费者的青睐.它能免费打电话的技能也让很多消费者好奇:智能音箱怎么打电话?今天,荣耀发布了打电话视频教程,详细介绍了荣耀YOYO智能音箱四种通话模式.手把手教你用 ...
- “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制
"物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...
- 基于 QPlay 的智能无线流媒体传输音箱的设计
基于 QPlay 的智能无线流媒体传输音箱的设计 系统总体架构 QPlay音箱设备主要工作流程如图所示.由于采用libupnp作为UPnP SDK进行开发,所以程序开始时需要初始化UPnP SDK. ...
- a113 智能音箱芯片方案_高通入局智能音箱,首款四核单芯片方案曝光
不得不说,智能音箱已经成为目前重要的科技品类之一,许多公司包括亚马逊.谷歌.苹果.阿里巴巴.小米等等,都在大举进军智能音箱市场. 为了尽可能为更多产品提供核心原件,近日,高通公司推出了一款全新的SOC ...
- 物联网技术周报第 103 期: DIY 智能音箱:基于 Raspberry Pi + Snowboy + AVS
新闻 \\ \ <设计缺陷将导致亚马逊Echo变身成为监听设备>MWR的安全研究专家发现亚马逊Echo存在一个物理攻击漏洞,该漏洞将允许攻击者获得设备的root shell,然后安装恶意软 ...
- 基于 QPlay 的智能无线流媒体传输音箱的功能实现
基于 QPlay 的智能无线流媒体传输音箱的功能实现 系统核心功能模块 系统需要实现的核心功能有QPlay认证功能,QPlay队列功能,设备离线功能,歌曲播放功能. QPlay认证功能模块 QPlay ...
最新文章
- 这个插件竟打通了Python和Excel,还能自动生成代码!
- Centos7 安装redis
- .NET Compact Framework 2.0 SP2 for Platform Builder (4.2, 5.0, 6.0)
- mysqlcsv导入中文乱码_Mysql 导入导出csv 中文乱码问题的解决方法
- 玩转Jquery中的动画效果(animate方法)
- 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
- 张朝阳直播做饭上演“吃播”,“Charles的好物分享”探索带货形式新边界
- ARP-地址解析协议
- abi-compliance-checker 理解
- C语言pow 函数的总结:
- C# 很少人知道的科技
- 李瑞霖4.13黄金走势短线放空原油能否筑底反弹?行情涨跌分析
- Python使用PuLP第三方库解决线性规划问题
- 旅行社如何通过抖音短视频获客?
- 精品课程申报系统实战开发代码全纪录
- Qt之加载百度离线地图(WebKit和WebEngine)
- vue实战记录(六)- vue实现购物车功能之地址列表选配
- 什么是DHCP(接口模式+全局模式)
- 2020CVPR人体姿态估计论文盘点
- 傍上在线教育的“大腿”,平板电脑未来可期?
热门文章
- scrapy html页面加载未完成,Scrapy与scrapy-splash框架快速加载js页面
- TabLayout使用介绍
- Unity双人坦克大战竞速游戏,超简单教学
- J-Flash 读取Flash数据
- NO.6网工学习之QINQ
- android如何切换主题背景图片,安卓怎么更换主题 安卓手机更换壁纸与主题教程...
- [Java并发包学习]深度剖析ConcurrentHashMap
- Python3自然语言处理(3)——WordNet
- opencv3/C++ SURF特征检测
- 163VIP邮箱如何注册?163VIP企业邮箱申请介绍!