android音乐播放器文章,Android复习09【内容提供者、音乐播放器】
目 录
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;
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;
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);
}
@Override
public 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());
}
}
@Override
public boolean onCreate() {
mHelper = new MyHelper(getContext());
return true;
}
@Override
public 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());
}
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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音乐播放器文章,Android复习09【内容提供者、音乐播放器】相关推荐
- android音乐播放器文章,Android论文音乐播放器文章.doc
毕业论文毕业设计开题报告论文报告设计报告可行性研究报告 移动互联网开发 结业论文设计 学生姓名: 黄敏 学 号: k031241508 班 级: k0312415 论文题目: 音乐播放器 摘要: 当今 ...
- Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
使用excel2010版的同学,在进行筛选时,肯定都对这句话很熟悉:将当前所选内容添加到筛选器.但很多同学天天看到,却不知道什么是筛选器?它有什么作用. 其实,这里所指的筛选器就是储存筛选结果的一个虚 ...
- Android 进阶——Framework 核心之Android Storage Access Framework(SAF)存储访问框架机制详解(一)
文章大纲 引言 一.Android Storage Access Framework 二.Storage Access Framework 的主要角色成员 1.Document Provider 文件 ...
- 每一位Android开发者应该知道的Android体系架构和开发库
Android的体系架构鼓励组件重用,允许开发者发布共享Activity.Service并且访问其他应用程序的数据,还可以根据开发者制定的安全限制进行管理.话虽如此,今天我将分享一些关于Android ...
- Android复习09【内容提供者、音乐播放器(附完整工程文件)】
2020-04-16[第9周---周四] 音乐播放器Android代码下载:https://wws.lanzous.com/ifqzihaxvij 目 录 PersonCp PersonCp.java ...
- android 音乐播放器框架,Android音乐播放器 -- 实现框架
MediaPlayer 框架有两种方案 第一种是通过全局变量保存当前状态,触发状态后获取全局变量进行配置 第二种是通过intent,让 Media player service 和 activity之 ...
- Android开发笔记(一百二十六)自定义音乐播放器
MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...
- android airplay音乐播放器,您需要知道的关于使用AirPlay播放音乐的一切 | MOS86
如果您使用Mac或iOS设备,您可能会了解AirPlay,Apple的流式传输协议,可以将音频和/或视频发送到各种设备.最初于2004年推出AirTunes,仅从iTunes到Apple设备的音频,A ...
- 简易音乐播放器(Android Studio)
Android期末作业,临时抱佛脚(手动滑稽 分享下音乐播放的源码吧.(只能播放内嵌音乐 PS:完整工程下载及相关说明:https://download.csdn.net/download/weixi ...
最新文章
- Python 函数学习
- 带头结点的线性表的链式实现
- 如何快速定位当前数据库消耗CPU最高的sql语句?
- vmware提示:此虚拟机似乎正在使用中,无法取得所有权的解决办法
- Nagios远程监控软件的安装与配置详解
- thinkphp中__construct与_initialize()的区别
- c传给php数据解包,小程序源码提取工具,完美解包,一键提取小程序源代码工具_PHP源码...
- Python学习(九)IO 编程 —— 文件夹及文件操作
- Linux 虚拟机安装 MySQL 教程
- Target folder is neither empty nor does it point to an existing SDK installtion.
- c语言中实型标准,在C语言中的实型变量分为两种类型.docx
- gcc: error trying to exec ‘cc1plus‘: execvp: Permission denied
- 国内工业软件排行榜、市场份额与主要玩家
- Angular最佳实践之$http-麻雀虽小 五脏俱全
- excel-countifs和sumifs函数
- 【C语言】深度剖析数据在内存中的存储
- ux设计_UX评论模式品牌知道规则并且也打破了规则
- 【Machine Learning】模型融合之Stacking
- git命令和遇见得 warning:
- win10开机一直转圈圈进不去系统怎么办
热门文章
- Docker:集装箱式“运输”在软件上的实现
- POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)
- JTLParser-linux上jmeter的jtl文件二次分析
- 基于SuperSocket的IIS主动推送消息给android客户端
- hibernate连接数据库配置
- MailBee.NET Objects发送电子邮件(SMTP)教程六:创建并发送带有附件的邮件
- Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
- MySQL 性能监控 4 大指标
- 2016年学习Linux决心书(老男孩教育在线课程班第二期)
- android传递数据bundle封装传递map对象