2020-04-16【第9周---周四】

音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij

目 录

PersonCp

PersonCp.java

insert()

ContentObserver

音乐播放器

1、添加读写权限

1.1、动态权限授予(调用封装好的方法)

2、获取音乐文件(MainActivity.java)

2、Music.java(实体类)

申请访问SD卡的权限

设置适配器

下拉刷新


PersonCp

PersonCp.java

package cn.wangzg.personcp;import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;import java.util.Objects;/*** Time: 2020/4/13* Author: wangzhiguo* Description: 功能描述*/
public class PersonCp extends ContentProvider { //数据库作为数据源,将数据保存到数据库中。private MyHelper mHelper;private final static String AUTHORITY = "cn.wangzg.personprovider";private static UriMatcher mUriMatcher;private static final int PERSON_DIR = 0;private static final int PERSON = 1;/*** 利用静态代码块初始化UriMatcher* 在UriMatcher中包含了多个Uri,每个Uri代表一种操作* 当调用UriMatcher.match(Uri uri)方法时就会返回该uri对应的code;* 比如此处的PERSONS和PERSON*/static {mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);// 该URI表示返回所有的person,其中PERSONS为该特定Uri的标识码mUriMatcher.addURI(AUTHORITY, "person", PERSON_DIR);// 该URI表示返回某一个person,其中PERSON为该特定Uri的标识码mUriMatcher.addURI(AUTHORITY, "person/#", PERSON);}/*** 在自定义ContentProvider中必须覆写getType(Uri uri)方法.* 该方法用于获取Uri对象所对应的MIME类型.* <p>* 一个Uri对应的MIME字符串遵守以下三点:* 1 必须以vnd开头* 2 如果该Uri对应的数据可能包含多条记录,那么返回字符串应该以"vnd.android.cursor.dir/"开头* 3 如果该Uri对应的数据只包含一条记录,那么返回字符串应该以"vnd.android.cursor.item/"开头*/@Overridepublic String getType(Uri uri) {switch (mUriMatcher.match(uri)) {case PERSON_DIR:return "vnd.android.cursor.dir/" + AUTHORITY + ".persons";case PERSON:return "vnd.android.cursor.item/" + AUTHORITY + ".person";default:throw new IllegalArgumentException("unknown uri" + uri.toString());}}@Overridepublic boolean onCreate() {mHelper = new MyHelper(getContext());return true;}/*** 插入操作:* 插入操作只有一种可能:向一张表中插入* 返回结果为新增记录对应的Uri* 方法db.insert()返回结果为新增记录对应的主键值*/@Overridepublic Uri insert(Uri uri, ContentValues values) {SQLiteDatabase db = mHelper.getWritableDatabase();switch (mUriMatcher.match(uri)) {case PERSON_DIR:long newId = db.insert("person", "name,phone,salary", values);//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应getContext().getContentResolver().notifyChange(uri, null);return ContentUris.withAppendedId(uri, newId);default:throw new IllegalArgumentException("unknown uri" + uri.toString());}}/*** 更新操作:* 更新操作有两种可能:更新一张表或者更新某条数据* 在更新某条数据时原理类似于查询某条数据,见下.*/@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int updatedNum = 0;switch (mUriMatcher.match(uri)) {// 更新表case PERSON_DIR:updatedNum = db.update("person", values, selection, selectionArgs);break;// 按照id更新某条数据case PERSON:long id = ContentUris.parseId(uri);String where = "id=" + id;if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}updatedNum = db.update("person", values, where, selectionArgs);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);return updatedNum;}/*** 删除操作:* 删除操作有两种可能:删除一张表或者删除某条数据* 在删除某条数据时原理类似于查询某条数据,见下.*/@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {SQLiteDatabase db = mHelper.getWritableDatabase();int deletedNum = 0;switch (mUriMatcher.match(uri)) {// 删除表case PERSON_DIR:deletedNum = db.delete("person", selection, selectionArgs);break;// 按照id删除某条数据case PERSON:long id = ContentUris.parseId(uri);String where = "id=" + id;if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}deletedNum = db.delete("person", where, selectionArgs);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}//向外界通知该ContentProvider里的数据发生了变化 ,以便ContentObserver作出相应Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);return deletedNum;}/*** 查询操作:* 查询操作有两种可能:查询一张表或者查询某条数据* <p>* 注意事项:* 在查询某条数据时要注意--因为此处是按照id来查询* 某条数据,但是同时可能还有其他限制.例如:* 要求id为2且name为xiaoming1* 所以在查询时分为两步:* 第一步:* 解析出id放入where查询条件* 第二步:* 判断是否有其他限制(如name),若有则将其组拼到where查询条件.* <p>* 详细代码见下.*/@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {SQLiteDatabase db = mHelper.getWritableDatabase();Cursor cursor = null;switch (mUriMatcher.match(uri)) {// 查询表case PERSON_DIR:cursor = db.query("person", projection, selection, selectionArgs, null, null, sortOrder);break;// 按照id查询某条数据case PERSON:// 第一步:long id = ContentUris.parseId(uri);String where = "id=" + id;// 第二步:if (selection != null && !"".equals(selection.trim())) {where = selection + " and " + where;}cursor = db.query("person", projection, where, selectionArgs, null, null, sortOrder);break;default:throw new IllegalArgumentException("unknown uri" + uri.toString());}return cursor;}
}

insert()

ContentObserver

菜鸟教程 【4.4.1 ContentProvider初探】 

https://www.runoob.com/w3cnote/android-tutorial-contentprovider.html

音乐播放器

1、添加读写权限

1.1、动态权限授予(调用封装好的方法)

2、获取音乐文件(MainActivity.java)

2、Music.java(实体类)

申请访问SD卡的权限

设置适配器

下拉刷新

点个赞吧~      b( ̄▽ ̄)d

Android复习09【内容提供者、音乐播放器(附完整工程文件)】相关推荐

  1. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  2. Android应用--简、美音乐播放器增加音量控制

    Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...

  3. Android应用--简、美音乐播放器原型放送(作者:小巫)

    Android应用--简.美音乐播放器原型放送 2013年7月5日简.美音乐播放器开发 前言:小巫的简.美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的 ...

  4. Android学习之路4——音乐播放器后台播放

    Android学习之路4--音乐播放器后台播放 一.实验题目 简单音乐播放器 二.实现内容 实现一个简单的播放器,要求功能有: 播放.暂停.停止.退出功能,按停止键会重置封面转角,进度条和播放按钮:按 ...

  5. 一个基于Android开发的简单的音乐播放器

    一个基于Android开发的简单的音乐播放器 记得当时老师让我们写因为播放器时,脑子一头雾水,网上杂七杂八的资料也很少有用,因此索性就自己写一篇,希望对有缘人有用. 因为有好多人问我要源码,所以附上g ...

  6. Android课程设计大作业-音乐播放器

    Android课程设计大作业-音乐播放器 一.**主要实现界面效果** 1)登录界面 2)音乐列表界面 3)音乐播放界面 二.**系统设计** 1)使用Service播放音乐 2) 前台界面(Acti ...

  7. Android应用--简、美音乐播放器实现专辑倒影效果

    Android应用--简.美音乐播放器实现专辑倒影效果 2013年7月4日 简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词与专辑界面 5 ...

  8. 基于Android系统开发的简易音乐播放器

    大概做了一周左右,一个简易版本的音乐播放器.主要有三个界面,先上图: 一个主界面:主要负责1加载外部存储的音乐文件信息到应用内置数据库中2转到音乐文件列表界面 一个音乐文件列表界面:主要1负责展示音乐 ...

  9. Android 小项目之--Mini音乐播放器【简单版】(附源码)

    上篇文章讲服务的例子中,有个演示服务的后台播放音乐,今天就来讲一讲多媒体之一的音乐播放. 说到多媒体不得不向上追溯,空间多媒体是如何实现的,如何可以让我们轻松的播放音乐.视频?本章讲述点大致如下: 1 ...

最新文章

  1. excel:隔行选取复制功能
  2. .NET获取主机名字、IP的两种方式(转载)
  3. Ansible批量添加远程登录用户
  4. IC/RFID/NFC 关系与区别
  5. 图灵机器人-Java/Android
  6. 记录使用 Cake 进行构建并制作 nuget 包
  7. 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器
  8. Linux初级入门(第一次作业)
  9. php与mysql对接_PHP与MySql建立连接
  10. 服务器网页源代码被修改6,特洛伊木马服务器源代码(C#)
  11. zip 命令实现批量文件压缩
  12. 微信小程序 px和rpx px和pt 深度解析
  13. Working With JSON
  14. xib、stoaryboard详解
  15. IOS TableViewCell分割线设置和隐藏多余cell
  16. 提升网站流量和排名的方法,SEO优化要这样做
  17. mac下用户用户组命令行操作
  18. 迎娶白富美,走上人生巅峰。
  19. 云计算课程作业专业词汇
  20. 通过js实现切换背景颜色

热门文章

  1. php jquery ajax裁剪图照片,php+jquery+ajax无刷新图片上传裁切,模拟flash头像上传实例...
  2. mysql数据库安全配置文件_MySQL数据库安全配置
  3. 六十七、完成Vue项目首页图标区域布局和逻辑实现
  4. 三十六、深入Vue.js组件Component(上篇)
  5. 一阶暂态电路三要素法和三种响应
  6. 据调查95%以上的AI从业者不具备修改模型或者提出新模型的技术能力
  7. 中文NER任务实验小结:BERT-MRC的再优化
  8. CTO案头必备|AI技术产业落地的42章经
  9. FGPM:文本对抗样本生成新方法
  10. Seq2Seq中Exposure Bias现象的浅析与对策