1.MediaProvider存储手机中的媒体文件,用 SQLite 数据库存储图片、视频、音频等多媒体文件的信息,供视频播放器、音乐播放器、图库使用。以 root 权限进入 adb shell,使用 sqlite3 打开位于手机上 /data/data/com.android.providers.media/databases 上的一个数据库。以 external 开头的数据库存储的是 SD 卡媒体信息,一张卡对应一个,所以如果手机使用过多张卡会有多个数据库。以 internal 开头的数据库存储手机内部存储器的媒体信息。因为一般用户无法访问手机内部存储器,而且这两个数据库结构是大体上是相同的,所以只需要关注 external 数据库即可。

2.配置读写权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />

代码声明:

private ContentProviderClient mProvider; private static final String[] FILES_PRESCAN_PROJECTION = new String[]{
            MediaStore.Files.FileColumns._ID, // 0
MediaStore.Files.FileColumns.DATA, // 1 };
private ContentValues toValues(int i) {
ContentValues map = new ContentValues(); map.put(MediaStore.MediaColumns.DATA,"/zcx"+i);
map.put(MediaStore.MediaColumns.TITLE,"zcxzcx"); map.put(MediaStore.MediaColumns.SIZE,5);
map.put(MediaStore.MediaColumns.MIME_TYPE,"tiantian");
return map;
} main():
mProvider = getContentResolver()
.acquireContentProviderClient(MediaStore.AUTHORITY);
Uri mFilesUri = MediaStore.Files.getContentUri("external");
Cursor c = null; String where = MediaStore.Files.FileColumns._ID + ">?";//+ " AND " + MediaStore.Files.FileColumns.DATA + "=?";
Uri limitUri = mFilesUri.buildUpon().appendQueryParameter("limit", "1000").build();
String[] selectionArgs = null;selectionArgs = new String[] { "" };long lastId=160000;//, "/zcx3"
ContentValues values = new ContentValues();values = toValues(0);
ContentValues values2 = new ContentValues();values2 = toValues(1);
List<ContentValues> list = new ArrayList<ContentValues>(); int cou = 100;
while ((cou--)!=0){
list.add(toValues(cou));
}
try {
ContentValues[] valuesArray = new ContentValues[list.size()];
valuesArray = list.toArray(valuesArray);
//mProvider.insert(mFilesUri,values);
//mProvider.insert(mFilesUri,values2);
st = System.currentTimeMillis();
mProvider.bulkInsert(mFilesUri,valuesArray);
end = System.currentTimeMillis();
} catch (RemoteException e) {
Log.d("zcxdatabase2","RemoteException = ");
e.printStackTrace();
}
while (true) {
selectionArgs[0] = "" + lastId;
if (c != null) {
c.close();
c = null;
}
try {
c = mProvider.query(limitUri, FILES_PRESCAN_PROJECTION,
where, selectionArgs, MediaStore.Files.FileColumns._ID, null);
} catch (RemoteException e) {
e.printStackTrace();
}
if (c == null) {
break;
} int num = c.getCount(); if (num == 0) {
break;
}
while (c.moveToNext()) {
long rowId = c.getLong(0);
String path = c.getString(1);
Log.d("zcxdatabase","rowId = "+rowId+" path = "+path);
lastId = rowId; // Only consider entries with absolute path names.
// This allows storing URIs in the database without the
// media scanner removing them. }
//break;
}
 

参考文档:https://www.cnblogs.com/linlf03/p/3477077.html

android-读取MediaProvider的更多相关文章

  1. Android读取自定义View属性

    Android读取自定义View属性 attrs.xml : <?xml version="1.0" encoding="utf-8"?> < ...

  2. Android读取JSON格式数据

    Android读取JSON格式数据 1. 何为JSON? JSON,全称为JavaScript Object Notation,意为JavaScript对象表示法. JSON 是轻量级的文本数据交换格 ...

  3. Android - 读取JSON文件数据

    Android读取JSON文件数据 JSON - JavaScript Object Notation 是一种存储和交换文本信息的语法. JSON对象在花括号中书写.用逗号来分隔值. JSON数组在方 ...

  4. Android 读取Assets下的资源文件

    做Android开发近半年了,东西越学越多,硬盘容量越来越小.很多东西找起来也不方便,为此,我打算从今天起把工作中学到的东西整理起来,写成日记.也希望与广大网友分享我的经验.一同进步.今天主要介绍文件 ...

  5. Android 读取assets文件下的txt文件

    android 读取assets文件下的txt文件,解决了读取txt文件的乱码问题: package com.example.com.scrollview; import java.io.Buffer ...

  6. Android读取asserts和raw文件夹下的文件

    Android读取asserts和raw文件夹下的文件 经常需要用到读取“/res/raw”和"/asserts"文件夹下的文件,索性写成工具类方便以后使用. 一.raw文件夹下的 ...

  7. MTK Android 读取SIM卡参数,获取sim卡运营商信息

    android 获取sim卡运营商信息(转)   TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TE ...

  8. Android 读取蓝牙设备信息开发

    (1)Android手机一般以客户端的角色主动连接SPP协议设备(接上蓝牙模块的数字传感器),连接流程是: 1.使用registerReceiver注册BroadcastReceiver来获取蓝牙状态 ...

  9. android 读取sd卡中的图片

    一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限  -->    <uses-permission android:name="android.perm ...

  10. android读取远程图片案例

    关键代码:Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);imageview.setImageBitmap(bitm ...

随机推荐

  1. python 多进程/多线程/协程 同步异步

    这篇主要是对概念的理解: 1.异步和多线程区别:二者不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段.异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事 ...

  2. java中mysql查询报错java.sql.SQLException: Before start of result set

    异常:java.sql.SQLException: Before start of result set 解决方法:使用rs.getString();前一定要加上rs.next(); sm = con ...

  3. 大数据学习笔记5 - Spark

    Spark是一个基于内存计算的大数据并行计算框架.所以,Spark并不能完全替代Hadoop,主要用于替代Hadoop中的MapReduce计算模型. 在实际应用中,大数据处理无非是以下几个类型: 复 ...

  4. huawei USG防火墙子接口技术的应用案例

    网络拓扑: 在中小企业的办公网络的设计中,通常为了安全考虑,需要将不同部门之间的互访的流量经过防火墙中转,同时结合vpn stance将业务进行隔离,在本例中,使用两台USG防火墙做HA作为整个办公网 ...

  5. django后台对某些字段设置颜色

    在model.py的class函数中添加如下代码 #对签收状态设置颜色 def color_state(self): ': assign_state_name = '待签收' color_code = ...

  6. android 7.0 调用系统相机崩溃的解决方案(非谷歌官方推荐)

    解决方案: 1.(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限. 不用修改原有代码,在Application的oncreate方法中:(或者直接放在调用相机的activ ...

  7. 使用QML绘制界面

    1 使用QML设计登录界面 https://www.cnblogs.com/bhlsheji/p/5324871.html 2 使用QML实现下拉列表框  https://blog.csdn.net/ ...

  8. hanjiaqi

    2017*1501:我是韩佳琦:我的爱好是睡觉: 我的码云个人主页是:https://gitee.com/projects/new 我的第一个项目地址是:https://gitee.com/hanji ...

  9. swift两种获取相册资源PHAsset的路径的方法(绝对路径)

    方法中使用到的phasset就是我们取到的PHAsset对象 方法一: let options = PHVideoRequestOptions() options.version = PHVideoR ...

  10. create-react-app创建项目并用git上传至GitHub及展示预览效果

    1.在本地中创建一个项目所在的文件夹 2.npm -g create-react-app 3.在此文件夹下 create-react-app react-demo (项目名) 4.cd react-d ...