文章目录

  • 0 项目说明
  • 1 模块设计架构
  • 2 界面效果
  • 3 项目源码
  • 4 最后

0 项目说明

基于安卓APP的音乐播放器设计

提示:适合用于课程设计或毕业设计,工作量达标,源码开放


1 模块设计架构

1、音乐播放模块的大体架构

  • MusicServie负责维护音乐播放
    管理 MediaPlayer
    管理 播放队列
  • Client 与 MusicService的通讯 MusicService
    会开启一个广播接收者,根据相应的广播Action,处理相应的事件 抽取音乐播放Action类, 即发送特定的Action来控制音乐播放
    Client 通过广播接收者,来更新音乐播放相关UI : 进度、播放状态等 Client
    通过Action类,向Service的广播接收者发送特定的Action,来实现音乐的控制。

2、阅读模块的大体架构

  • 知乎阅读:StickHeader的实现, 对于知乎文章的展示, 利用RxJava请求文章内容,文章的CSS样式, 然后拼接
    Html内容,进行展示
  • 段子:普通的RecyclerView列表
  • 图片:通过分类window来切换图片请求的URI
    图片的查看,简单的实现缩放退出

3、 整个APP的收藏模块

  • 利用第三方关系型数据库, 泛型, 实现了简单的对象存储
  • 最简单的收藏就是: 收藏:把对象存入数据库, 删除收藏: 把对象从数据库中删除

4、 APP 中RecylerView的使用

  • 通过对Adapter和ViewHolder的抽取
  • 整个具体UI的展现, 可以说是面向 ItemHandler 的编程

2 界面效果




3 项目源码

package com.susion.boring.base.ui;import android.Manifest;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.WindowManager;import com.susion.boring.R;
import com.susion.boring.base.ui.mainui.MainActivity;
import com.susion.boring.utils.SystemOperationUtils;
import com.susion.boring.utils.UIUtils;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class SplashActivity extends Activity {private static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 200;private boolean mHasSkip;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);     //no status barsetContentView(R.layout.activity_splash);requestPermission();}public void skipToMainActivity() {if (mHasSkip) {return;}installShortcut();mHasSkip = true;getWindow().getDecorView().findViewById(android.R.id.content).postDelayed(new Runnable() {@Overridepublic void run() {MainActivity.start(SplashActivity.this);SplashActivity.this.finish();}}, 3000);}private void installShortcut() {String shortCutName = getString(R.string.app_name);if (!SystemOperationUtils.hasShortcut(this, shortCutName)) {SystemOperationUtils.createShortCut(this, shortCutName, R.mipmap.ic_logo);}}public void requestPermission() {String[] needPermissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};final List<String> requestPermissions = new ArrayList<>();for (int i = 0; i < needPermissions.length; i++) {if (ActivityCompat.checkSelfPermission(this, needPermissions[i]) != PackageManager.PERMISSION_GRANTED) {requestPermissions.add(needPermissions[i]);}}if (!requestPermissions.isEmpty()) {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setOnDismissListener(new DialogInterface.OnDismissListener() {@Overridepublic void onDismiss(DialogInterface dialog) {skipToMainActivity();}});builder.setTitle("你需要开启以下权限").setMessage("访问存储空间, 读取媒体信息").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {ActivityCompat.requestPermissions(SplashActivity.this, requestPermissions.toArray(new String[requestPermissions.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);}});builder.show();} else {skipToMainActivity();}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (permissions == null || permissions.length == 0) {skipToMainActivity();return;}switch (requestCode) {case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:Map<String, Integer> perms = new HashMap<>();for (int i = 0; i < permissions.length; i++)perms.put(permissions[i], grantResults[i]);if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {skipToMainActivity();} else {AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);builder.setTitle("拒绝这些权限, 你将不能很好的使用").setMessage("访问存储空间, 读取媒体信息").setPositiveButton("设置", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);intent.setData(Uri.fromParts("package", getPackageName(), null));startActivity(intent);}}).show();}break;default:super.onRequestPermissionsResult(requestCode, permissions, grantResults);}}
}

4 最后

毕业设计 安卓音乐播放器APP相关推荐

  1. 安卓音乐播放器app开发(一)---功能分析及启动页的制作

    音乐播放器app-功能分析及启动页的制作 现如今的音乐播放器的app种类繁多,让有选择困难症的同胞们难以抉择.现在,让Ryan带你打造一款属于自己的音乐播放器app. 功能介绍 实现本地音乐及在线音乐 ...

  2. sony android mp3播放器,高音质与流媒体兼具,索尼 NW-ZX500 安卓音乐播放器评测

    原标题:高音质与流媒体兼具,索尼 NW-ZX500 安卓音乐播放器评测 用传统的音乐播放器来听歌,似乎已经逐渐变成了一个相对小众的需求. 在我眼里,曾被称呼为「随身听」的音乐播放器,已经逐渐被归类为如 ...

  3. 在线音乐播放器app

    在线音乐播放器app 前言 该app是安卓课程的大作业,旷了一学期的课,代码有点乱. 使用的API:网易云音乐 API 代码地址:https://github.com/xjhqre/music-pla ...

  4. 【android精品源码系列】安卓音乐播放器

    安卓音乐播放器[源码推荐] 简介 效果演示 获取方式 关于我 简介 分享一个Android音乐播放器,除了基本的音乐播放功能,还集成了知乎日报.段子图片等功能.主要功能有: 1.音乐部分 2.知乎日报 ...

  5. 设计灵感|音乐播放器App界面如何设计?

    音乐播放器 App 界面要怎么设计?来看看集设网精选的 12 款移动端音乐播放器,学习一下如何设计出一个易用性和交互性良好.设计感受舒适.展示层级清晰的界面. 音乐播放器App界面如何设计? - 集设 ...

  6. 音乐播放器App界面优秀案例,通过案例看大咖如何设计?

    音乐播放器 App 界面要怎么设计?集设网 www.ijishe.ccom精选的 12 款移动端音乐播放器,学习一下如何设计出一个易用性和交互性良好.设计感受舒适.展示层级清晰的界面. 看这里

  7. Android项目实践(四)——音乐播放器APP

    关于Android制作音乐播放器APP的几点建议 1.权限获得 1.在AndroidManifest.xml文件中,做如下声明: <uses-permission android:name=&q ...

  8. 【Android】音乐播放器APP的设计与实现

    [Android]音乐播放器APP的设计与实现 一.界面设计 二.核心代码 一.界面设计 (1)注册登录 (2)主界面 (3)音乐播放器 可以实现开始,暂停,下一首,上一首功能:滑动进度条可以改变音乐 ...

  9. 关于我的安卓音乐播放器程序该如何使用的问题

    0. 说明 本文旨在介绍我写的程序 ---- 安卓音乐播放器该如何使用的问题,如果想要了解播放器的源码,请进入Android播放器的专栏,点击跳转查看相关文章. 这个只适合于做一个课设,程序里目前还有 ...

最新文章

  1. python了解一下_Python发展史了解一下
  2. 《DSP using MATLAB》示例Example7.20
  3. 反编译android 状态栏沉浸,教程:反编译修改实现状态栏时间居左,去除锁屏运营商...
  4. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)
  5. 免费手机WAP网站大全
  6. 全面剖析雅虎助手以及网络实名的流氓行径(4)
  7. 网易公开课 mysql_“网易云课程”SQL分析
  8. 课程计划、课程标准、教材三者关系
  9. 最新抖音X-Bogus、msToken、_signature、ttwid、webid分析(2023-04-12)
  10. JS显示团购剩下时间的代码整理
  11. 美国服务器网络黑客的常用手段
  12. Android tcp与网络调试助手初入了解
  13. 怎么查阅参考文献资料?
  14. 50道HIVE练习题-搞定了这50题hive sql,那可不嘚直接通关起飞!!!
  15. Cadence Allegro自动放置所有元件图文教程及视频演示
  16. DCA、NRI、IDI
  17. Cisco ASA防火墙实现IPSec 虚拟专用网,可跟做!!!
  18. javascript汉字转换成拼音(部分)
  19. Fragment not attached to Activity
  20. Oracle 一致性读和当前读

热门文章

  1. 拳王虚拟项目公社:在闲鱼卖东西是怎么提高曝光率?提高曝光率的技巧
  2. 金立f5android10,金立F5和金立S9哪个好?金立F5和金立S9区别对比评测
  3. 强制关闭MacBook程序工具Xcode
  4. 中国联通流量卡有信号但是说服务器,为何我联通卡有信号,流量也可以开,但信息发不出去?...
  5. 《面试技巧》孩子,听叔一句劝,面试水太深,你把握不住。
  6. 基于javaweb的茶叶售卖商城系统(java+ssm+jsp+easyui+mysql)
  7. 检测本机是否登录了指定QQ账号
  8. 用Spire.XLS给Excel添加水印,打印水印
  9. 悲壮的码字僧(研究生)艰辛写作路(PS:-学渣开启学霸模式)
  10. 根据条形码编号查询商品名称免费接口