Android复习09【内容提供者、音乐播放器(附完整工程文件)】
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【内容提供者、音乐播放器(附完整工程文件)】相关推荐
- Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)
Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...
- Android应用--简、美音乐播放器增加音量控制
Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...
- Android应用--简、美音乐播放器原型放送(作者:小巫)
Android应用--简.美音乐播放器原型放送 2013年7月5日简.美音乐播放器开发 前言:小巫的简.美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的 ...
- Android学习之路4——音乐播放器后台播放
Android学习之路4--音乐播放器后台播放 一.实验题目 简单音乐播放器 二.实现内容 实现一个简单的播放器,要求功能有: 播放.暂停.停止.退出功能,按停止键会重置封面转角,进度条和播放按钮:按 ...
- 一个基于Android开发的简单的音乐播放器
一个基于Android开发的简单的音乐播放器 记得当时老师让我们写因为播放器时,脑子一头雾水,网上杂七杂八的资料也很少有用,因此索性就自己写一篇,希望对有缘人有用. 因为有好多人问我要源码,所以附上g ...
- Android课程设计大作业-音乐播放器
Android课程设计大作业-音乐播放器 一.**主要实现界面效果** 1)登录界面 2)音乐列表界面 3)音乐播放界面 二.**系统设计** 1)使用Service播放音乐 2) 前台界面(Acti ...
- Android应用--简、美音乐播放器实现专辑倒影效果
Android应用--简.美音乐播放器实现专辑倒影效果 2013年7月4日 简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词与专辑界面 5 ...
- 基于Android系统开发的简易音乐播放器
大概做了一周左右,一个简易版本的音乐播放器.主要有三个界面,先上图: 一个主界面:主要负责1加载外部存储的音乐文件信息到应用内置数据库中2转到音乐文件列表界面 一个音乐文件列表界面:主要1负责展示音乐 ...
- Android 小项目之--Mini音乐播放器【简单版】(附源码)
上篇文章讲服务的例子中,有个演示服务的后台播放音乐,今天就来讲一讲多媒体之一的音乐播放. 说到多媒体不得不向上追溯,空间多媒体是如何实现的,如何可以让我们轻松的播放音乐.视频?本章讲述点大致如下: 1 ...
最新文章
- excel:隔行选取复制功能
- .NET获取主机名字、IP的两种方式(转载)
- Ansible批量添加远程登录用户
- IC/RFID/NFC 关系与区别
- 图灵机器人-Java/Android
- 记录使用 Cake 进行构建并制作 nuget 包
- 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器
- Linux初级入门(第一次作业)
- php与mysql对接_PHP与MySql建立连接
- 服务器网页源代码被修改6,特洛伊木马服务器源代码(C#)
- zip 命令实现批量文件压缩
- 微信小程序 px和rpx px和pt 深度解析
- Working With JSON
- xib、stoaryboard详解
- IOS TableViewCell分割线设置和隐藏多余cell
- 提升网站流量和排名的方法,SEO优化要这样做
- mac下用户用户组命令行操作
- 迎娶白富美,走上人生巅峰。
- 云计算课程作业专业词汇
- 通过js实现切换背景颜色
热门文章
- php jquery ajax裁剪图照片,php+jquery+ajax无刷新图片上传裁切,模拟flash头像上传实例...
- mysql数据库安全配置文件_MySQL数据库安全配置
- 六十七、完成Vue项目首页图标区域布局和逻辑实现
- 三十六、深入Vue.js组件Component(上篇)
- 一阶暂态电路三要素法和三种响应
- 据调查95%以上的AI从业者不具备修改模型或者提出新模型的技术能力
- 中文NER任务实验小结:BERT-MRC的再优化
- CTO案头必备|AI技术产业落地的42章经
- FGPM:文本对抗样本生成新方法
- Seq2Seq中Exposure Bias现象的浅析与对策