`

content provider 的query使用查询系统数据,获取所有音乐的title

阅读更多



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

 

 这样就结束了,很简单吧,现在让我们看一看运行效果。

 

 

 

 

  • 大小: 79.2 KB
分享到:
评论

相关推荐

    使用Content Provider案例

    在Android系统中,Content Provider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。本案例将深入探讨如何创建和使用Content Provider,以实现跨应用的数据交换。 首先,...

    Content Provider

    Content Provider的使用极大地增强了Android应用之间的数据共享能力,同时也提升了系统的安全性,因为它提供了统一的访问接口,并且可以控制数据的读写权限。在实际开发中,我们应合理设计Content Contract,规范...

    content_provider:使用sqlite android

    8. **使用ContentResolver**:在其他应用中,通过`Context.getContentResolver()`获取`ContentResolver`对象,然后使用它来调用Content Provider的方法,如`query()`, `insert()`, `update()`和`delete()`。...

    Android中通过MediaStore获取音乐文件信息方法

    在Android开发中,获取音乐文件信息是一个常见的需求,Android系统为此提供了一系列的接口和服务。本文主要探讨如何通过MediaStore获取SD卡上的音乐文件信息。 首先,Android系统利用MediaScanner、MediaProvider和...

    android日历源码

    使用ContentResolver的`query()`方法可以查询日历数据,例如查询所有事件: ```java Uri eventsUri = CalendarContract.Events.CONTENT_URI; Cursor cursor = getContentResolver().query(eventsUri, null, null...

    安卓Andriod源码——系统日历日程操作.zip

    Android提供了一个名为`android.provider.CalendarContract`的API,用于访问和修改系统日历数据。这个API包含了一系列的Content Providers,开发者可以通过Content Resolver与之交互,执行CRUD(创建、读取、更新、...

    安卓Android源码——安卓Android系统日历日程操作.rar

    使用`ContentResolver`的`query()`方法,通过`CalendarContract.Events.CONTENT_URI`,可以获取日历中的所有事件或特定条件的事件。查询结果是一个`Cursor`对象,可以遍历获取每个事件的信息。 ```java Uri uri = ...

    SD卡的音频文件获取与播放

    我们可以通过查询`MediaStore.Audio.Media.EXTERNAL_CONTENT_URI`来获取SD卡上的所有音频文件信息。这个URI代表了外部存储上所有的音频媒体项。查询时,我们可以使用`ContentResolver`的`query()`方法,并提供适当的...

    android系统判断快捷方式是否存在

    下面我们将详细介绍一种解决方案,该方案适用于Android 2.3及以上版本,并通过查询系统中的“favorites”表来判断是否已有应用程序的快捷方式。 #### 权限配置 首先,需要在AndroidManifest.xml文件中添加必要的...

    Pro-Android-3 BookProvider SQLiteOpenHelper

    例如,`getWritableDatabase()`或`getReadableDatabase()`可以获取可读写或只读的数据库实例,接着使用`rawQuery()`执行SQL查询,使用`insert()`, `update()`, 或 `delete()`来进行数据修改操作。 此外,`...

    分布式查询OPENQUERY

    在Microsoft SQL Server中,OPENQUERY特别适用于需要从多个异构数据库系统中提取数据的场景,如从Oracle、MySQL或其他SQL Server实例中获取信息。 #### 二、OPENQUERY基本语法与原理 **OPENQUERY**的基本语法结构...

    安卓开发-Android系统日历日程操作.zip.zip

    `CalendarContract`是Android提供的一个内容提供者(Content Provider),它允许应用程序读取和写入用户的日历数据。下面将详细介绍几个关键知识点: 1. **权限管理**: 在AndroidManifest.xml文件中,你需要添加...

    android开发入门与实战(下)

    例如,onCreate()方法用于初始化ContentProvider,query()方法用于查询数据,insert()方法用于插入数据,delete()方法用于删除数据,update()方法用于更新数据等。ContentProvider通过定义统一的URI格式来访问数据,...

    Android便签

    在这个应用中,用户可以创建、编辑和删除便签,所有数据都将存储在本地SQLite数据库中。 1. **ListView**: ListView是Android中用于展示大量数据的视图组件。在这个项目中,ListView被用来显示所有的便签条目。每个...

    系统资源的调用

    在Android开发中,系统资源的调用是应用与用户交互的关键环节。...在处理返回结果时,通常需要使用`ContentResolver`和`Cursor`来查询和解析数据。理解和掌握这些概念对于开发功能丰富的Android应用程序至关重要。

    LuceneNet开发实用参考样例

    Console.WriteLine($"ID: {scoreDoc.Doc}, Title: {doc.Get("title")}, Content: {doc.Get("content")}"); } } ``` ### 数据源集成 在实际项目中,通常需要从数据库或其他数据源获取数据。你可以创建一个数据...

    android 日历组件

    内容提供者是Android系统中用于数据共享的核心组件,`CalendarProvider`就是其中之一,它负责存储和检索日历数据。 要与日历组件交互,你需要获取相应的权限。在AndroidManifest.xml文件中添加以下权限: ```xml ...

    如何设计与实现当前网上考试系统

    - **数据库设计**:选用Access作为后台数据库管理系统,存储用户信息、试题信息等关键数据。 - **用户界面**:使用HTML、CSS等前端技术搭建用户友好的界面,便于用户操作。 #### 二、数据库设计与实现 在设计数据库...

    读写日历 android

    然后,你可以使用Uri对象来指定要查询的日历表,比如`CalendarContract.Calendars.CONTENT_URI`。查询通常会用到`CursorLoader`或`ContentResolver.query()`方法: ```java Cursor cursor = resolver.query...

    ASP后台添删改查 含数据库

    4. 查询(Query):查询数据最常用的是SELECT语句,可以返回一个Recordset对象供进一步处理: ```vbscript sql = "SELECT * FROM news WHERE id=" & someId Set rs = conn.Execute(sql) While Not rs.EOF Response...

Global site tag (gtag.js) - Google Analytics