Content Provider 相当于数据的接口,通过它可以 把程序内部的数据向其他应用公开,这样的话,
其他应用程序就可以通过Context.getContentResolver方法获得ContentResolver对象,
并使用ContentResolver.insert,ContentResolver.delete,ContentResolver.update,ContentResolver.query4个方法对程序内部的数据进行增删改查。
这里只用一个简单实例表明如何用content provider 的query获取所有音乐的title
先写一个类 MusicLoader
package com.life.testmusic; import android.annotation.SuppressLint; import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore.Audio.Media; import android.util.Log; import java.util.ArrayList; import java.util.List; public class MusicLoader { private static final String TAG = "com.example.nature.MusicLoader"; private static List<MusicInfo> musicList = new ArrayList<MusicInfo>(); private static MusicLoader musicLoader; private static ContentResolver contentResolver; //单例模式 public static MusicLoader instance(ContentResolver pContentResolver) { if (musicLoader == null) { //pContentResolver由activity的getContentResolver()方法传过来, contentResolver = pContentResolver; musicLoader = new MusicLoader(); } return musicLoader; } @SuppressLint("LongLogTag") private MusicLoader() { //query()返回Cursor 对象,类似与数据库的Cursor ,通过它来查询数据 //第一个参数是一个Uri,对应了获取哪种信息,这里是获取音乐媒体信息,其余暂时都设置为null Cursor cursor = contentResolver.query(Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor == null) { Log.i(TAG, "Music Loader cursor == null."); //光标移动到第一行 } else if (!cursor.moveToFirst()) { Log.v(TAG, "Music Loader cursor.moveToFirst() returns false."); } else { //获取到title列的索引displayNameCol int displayNameCol = cursor.getColumnIndex(Media.TITLE); do { //传入displayNameCol 拿出title String title = cursor.getString(displayNameCol); MusicInfo musicInfo = new MusicInfo(); musicInfo.setTitle(title ); //加入list musicList.add(musicInfo ); //移动到下一行继续获取下一首歌的信息 } while (cursor.moveToNext()); //关闭cursor. cursor.close(); } } public List<MusicInfo> getMusicList() { return musicList; } //内部类,用于存储歌曲信息 public static class MusicInfo { private long id; private String title; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } } }
这个类写好之后,就要在activity里面来使用它呈现数据了。
//获取单例,通过单例来getMusicList();, //其中参数是getContentResolver()获取到的ContentResolver对象 musicList=MusicLoader.instance(getContentResolver()).getMusicList(); String name=""; for (int i=0;i<musicList.size();i++) name+=musicList.get(i).getTitle()+"\n"; //textview, tvSongs用于呈现歌曲title tvSongs.setText(name);
这样就结束了,很简单吧,现在让我们看一看运行效果。
相关推荐
在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。本案例将深入探讨如何创建和使用Content Provider,以实现跨应用的数据交换。 首先,...
Content Provider的使用极大地增强了Android应用之间的数据共享能力,同时也提升了系统的安全性,因为它提供了统一的访问接口,并且可以控制数据的读写权限。在实际开发中,我们应合理设计Content Contract,规范...
8. **使用ContentResolver**:在其他应用中,通过`Context.getContentResolver()`获取`ContentResolver`对象,然后使用它来调用Content Provider的方法,如`query()`, `insert()`, `update()`和`delete()`。...
在Android开发中,获取音乐文件信息是一个常见的需求,Android系统为此提供了一系列的接口和服务。本文主要探讨如何通过MediaStore获取SD卡上的音乐文件信息。 首先,Android系统利用MediaScanner、MediaProvider和...
使用ContentResolver的`query()`方法可以查询日历数据,例如查询所有事件: ```java Uri eventsUri = CalendarContract.Events.CONTENT_URI; Cursor cursor = getContentResolver().query(eventsUri, null, null...
Android提供了一个名为`android.provider.CalendarContract`的API,用于访问和修改系统日历数据。这个API包含了一系列的Content Providers,开发者可以通过Content Resolver与之交互,执行CRUD(创建、读取、更新、...
使用`ContentResolver`的`query()`方法,通过`CalendarContract.Events.CONTENT_URI`,可以获取日历中的所有事件或特定条件的事件。查询结果是一个`Cursor`对象,可以遍历获取每个事件的信息。 ```java Uri uri = ...
我们可以通过查询`MediaStore.Audio.Media.EXTERNAL_CONTENT_URI`来获取SD卡上的所有音频文件信息。这个URI代表了外部存储上所有的音频媒体项。查询时,我们可以使用`ContentResolver`的`query()`方法,并提供适当的...
下面我们将详细介绍一种解决方案,该方案适用于Android 2.3及以上版本,并通过查询系统中的“favorites”表来判断是否已有应用程序的快捷方式。 #### 权限配置 首先,需要在AndroidManifest.xml文件中添加必要的...
例如,`getWritableDatabase()`或`getReadableDatabase()`可以获取可读写或只读的数据库实例,接着使用`rawQuery()`执行SQL查询,使用`insert()`, `update()`, 或 `delete()`来进行数据修改操作。 此外,`...
在Microsoft SQL Server中,OPENQUERY特别适用于需要从多个异构数据库系统中提取数据的场景,如从Oracle、MySQL或其他SQL Server实例中获取信息。 #### 二、OPENQUERY基本语法与原理 **OPENQUERY**的基本语法结构...
`CalendarContract`是Android提供的一个内容提供者(Content Provider),它允许应用程序读取和写入用户的日历数据。下面将详细介绍几个关键知识点: 1. **权限管理**: 在AndroidManifest.xml文件中,你需要添加...
例如,onCreate()方法用于初始化ContentProvider,query()方法用于查询数据,insert()方法用于插入数据,delete()方法用于删除数据,update()方法用于更新数据等。ContentProvider通过定义统一的URI格式来访问数据,...
在这个应用中,用户可以创建、编辑和删除便签,所有数据都将存储在本地SQLite数据库中。 1. **ListView**: ListView是Android中用于展示大量数据的视图组件。在这个项目中,ListView被用来显示所有的便签条目。每个...
在Android开发中,系统资源的调用是应用与用户交互的关键环节。...在处理返回结果时,通常需要使用`ContentResolver`和`Cursor`来查询和解析数据。理解和掌握这些概念对于开发功能丰富的Android应用程序至关重要。
Console.WriteLine($"ID: {scoreDoc.Doc}, Title: {doc.Get("title")}, Content: {doc.Get("content")}"); } } ``` ### 数据源集成 在实际项目中,通常需要从数据库或其他数据源获取数据。你可以创建一个数据...
内容提供者是Android系统中用于数据共享的核心组件,`CalendarProvider`就是其中之一,它负责存储和检索日历数据。 要与日历组件交互,你需要获取相应的权限。在AndroidManifest.xml文件中添加以下权限: ```xml ...
- **数据库设计**:选用Access作为后台数据库管理系统,存储用户信息、试题信息等关键数据。 - **用户界面**:使用HTML、CSS等前端技术搭建用户友好的界面,便于用户操作。 #### 二、数据库设计与实现 在设计数据库...
然后,你可以使用Uri对象来指定要查询的日历表,比如`CalendarContract.Calendars.CONTENT_URI`。查询通常会用到`CursorLoader`或`ContentResolver.query()`方法: ```java Cursor cursor = resolver.query...
4. 查询(Query):查询数据最常用的是SELECT语句,可以返回一个Recordset对象供进一步处理: ```vbscript sql = "SELECT * FROM news WHERE id=" & someId Set rs = conn.Execute(sql) While Not rs.EOF Response...