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()

af7c1aeb64b99e38aca3ca523a505146.png

ContentObserver

菜鸟教程 【4.4.1 ContentProvider初探】

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

0788806f5fdd1e4e43f9a754b6ebb6bb.png

音乐播放器

1、添加读写权限

5ec4ae5075b76a1f8ed52a62cb812398.png

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

e8728367b418156cb34309c0c0ee79d7.png

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

eb440abb3a01a9d7422167a46c9353ec.png

2、Music.java(实体类)

申请访问SD卡的权限

43b68b0749985151d6f23fbb14ea42b5.png

设置适配器

25bec743762a7b6fa811ea9e9d51413d.png

下拉刷新

82563e59b7ca9a75e7bb5790893591db.png

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

求求了~

小本生意,不容易啊~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员的业余项目

程序员的业余项目&#xff0c;我们也叫它 side project。 前几天&#xff0c;100offer 发起了一场活动叫 <寻找实干和坚持的技术力量>&#xff0c;他们是这么说的&#xff1a; 世界在被代码改变着&#xff0c;而我们在创造着代码。 仅仅是因为好玩&#xff0c;他开发了…

小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点

3月8日&#xff0c;谷歌放出了首个安卓9.0开发者预览版的固件包&#xff0c;不出意外的话&#xff0c;它的正式版会在今年正式亮相。但对广大安卓用户来说&#xff0c;想要立刻用上最新系统并非易事。目前来说&#xff0c;安卓碎片化问题依然严重&#xff0c;我们不妨现实点&am…

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的&#xff0c;数组可以通过索引下标进行元素的查询&#xff0c;字典可以通过键下标来获取相应的值。在使用数组时&#xff0c;一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了&#xff0c;那么对不起&#xff0c;如果由…

android tee,Android 9.0的新增安全特性与TEE

Android P&#xff0c;预计将于 2018 年第三季度发布最终版本。特别是Android8.0以来&#xff0c;安全性是Android版本变更的一个重要因素。从安全性增强方面来看&#xff0c;本次Android9.0版本主要有以下几个方面&#xff1a;统一的指纹身份验证对话框Android P 中&#xff0…

canny算子的理论分析

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

web框架-Struts开始

问题&#xff1a; 为什么有structs 作为一种框架&#xff08;frameset&#xff09;可以与传统的mvc进行比较&#xff1f; MVC是一种模式数据处理、显示和数据输入分开&#xff0c;来规范开发&#xff0c;但是却又并不规范。可以这样想&#xff1a;有三家公司&#xff0c;他们对…

接口自动化测试 返回html,接口自动化测试实战(更新完毕)

前言自动化没练习的项目怎么办&#xff1f;自动化已经成为测试的必备技能之一了&#xff0c;所以&#xff0c;很多想跳槽的测试朋友都在自学&#xff0c;特别是最实用的接口自动化&#xff0c;但是很多人因为没有可以练手的项目而苦恼&#xff0c;最终导致缺乏实战经验&#xf…

Opencv 图像增强算法 图像检测结果及代码

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

山寨“饿了么”应用中添加菜品数量按钮效果

山寨“饿了么”应用中添加菜品数量按钮效果 本人视频教程系类 iOS中CALayer的使用 最终效果&#xff1a; 山寨源头&#xff1a; 源码&#xff1a;&#xff08;此源码解决了重用问题&#xff0c;可以放心的放在cell中使用&#xff09; AddAndDeleteButton.h 与 AddAndDeleteBu…

html间数据传送,Express框架与html之间如何进行数据传递(示例代码)

关于Node.js 的Express框架介绍&#xff0c;推荐看菜鸟教程的Express框架&#xff0c;很适合入门&#xff0c;这里不再赘述&#xff0c;这里主要讲一下Express框架与html之间如何进行数据传递我采用的是JQuery的Ajax()向后台传参方式(url传参)1、Type属性为Get时&#xff1a;(1…

数字图像去噪典型算法及matlab实现

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染&#xff0c;一般数字图像系统中的常见噪声主要有&#xff1a;高斯噪声&#xff08;主要由阻性元器件内部产…

图像增强-图像锐化

图像锐化主要影响图像中的低频分量&#xff0c;不影响图像中的高频分量。 图像锐化的主要目的有两个&#xff1a; 1.增强图像边缘&#xff0c;使模糊的图像变得更加清晰&#xff0c;颜色变得鲜明突出&#xff0c;图像的质量有所改善&#xff0c;产生更适合人眼观察和识别的图像…

[译]git revert

git revert git revert用来撤销一个已经提交了的快照. 但不是从项目历史中移除这个commit, 而是生成一个新的commit, 老的commit还是保留在历史项目里面的. 这样做的好处是防止了项目丢失历史. 用法 git revert <commit>生成一个新的commit, 撤销老的<commit>的所有…

VMware桥接模式无法连网

2019独角兽企业重金招聘Python工程师标准>>> #VMware桥接模式无法连网 在VMware上装了个CentOS7&#xff0c;使用桥接模式连网&#xff0c;开始使用的时候没有问题&#xff0c;可以正常上网。最近打开的时候发现上不了网了&#xff0c; 使用ifconfig查看也没有分配到…

Java 7 中 NIO.2 的使用——第四节 文件和目录

Files类提供了很多方法用于检查在于你真正实际去操作一个文件或目录。这些方法强烈推荐&#xff0c;也非常有用&#xff0c;也能避免很多异常的发生。例如&#xff0c;一个很好的习惯就是在你试着移动一个文件从一个地方到另一个地方的时候&#xff0c;先检查文件是否存在。 检…

计算机二级access知识点6,2019年计算机二级ACCESS考试知识点:关系数据模型

【导语】2019年计算机二级考试备考正在进行中&#xff0c;为了方便考生及时有效的备考&#xff0c;那么&#xff0c;无忧考网为您精心整理了2019年计算机二级ACCESS考试知识点&#xff1a;关系数据模型&#xff0c;欢迎大家的关注。如想获取更多计算机二级考试的备考资料&#…

Moldflow中文版注塑流动分析案例导航视频教程

http://item.taobao.com/item.htm?spma1z10.5.w4002-9510581626.18.30lDTO&id43054534418 QQ&#xff1a;2911984429 http://aidem.lingw.net/

湖北大学计算机袁云,暑期走访不停歇 远赴异地送关怀——学校慰问离退休教职工和校友...

不畏酷暑送清风&#xff0c;心常为老怀关爱。7月至8月&#xff0c;正值高温时节&#xff0c;校领导和各单位负责人根据学校党委的安排&#xff0c;赴深圳、广州、北京、上海等地走访慰问70岁以上离退休教职工和部分校友&#xff0c;把学校的问候和祝福送到他们身边。“对老同志…

MATLAB各类函数详细讲解 simulike系统仿真分析

http://item.taobao.com/item.htm?spma230r.1.14.40.yWjJFw&id43113292964&ns1&abbucket2&_uk10ekfuf6120#detail Matlab基本操作函数 SIMULINK仿真函数 插值与拟合函数视频教程 符号运算函数视频教程 概率统计函数视频教程 级数与微积分函数视频教程 矩阵运…

Github Coding Developer Book For LiuGuiLinAndroid

Github Coding Developer Book For LiuGuiLinAndroid 收集了这么多开源的PDF&#xff0c;也许会帮到一些人&#xff0c;现在里面的书籍还不是很多&#xff0c;我也在一点点的上传&#xff0c;才上传不到一半&#xff0c;没办法&#xff0c;库存太多了 觉得全部pull麻烦的话&…