热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android播放SD卡上指定的一首歌(初级版)

在讲主题之前,我们先补充一点sqlite查询语句的知识(Android的数据库就是采用sqlite)。LIKE操作符一个很有用的关系操作符是LIKE。LIKE的作用与相等()很像,但却是通过一个模板

在讲主题之前,我们先补充一点sqlite查询语句的知识(Android的数据库就是采用sqlite)。

LIKE操作符

一个很有用的关系操作符是LIKE。LIKE的作用与相等(=)很像,但却是通过一个模板来进行字符串匹配。例如,要查询所有名称以字符“J”开始的食品,可使用如下语句:

sqlite> SELECT id, name FROM foods WHERE name LIKE 'J%';

id name

156 Juice box

236 Juicy Fruit Gum

243 Jello with Bananas

244 JujyFruit

245 Junior Mints

370 Jambalaya

模板中的百分号(%)可与任意0到多个字符匹配。下划线(_)可与任意单个字符匹配。

——引自《Sqlite权威指南》

语句说明:该语句会返回foods表中的id和name这两列的数据。其中,返回的数据必须满足:数据在name这一个属性上,是以J开头的字符串。


与之对应的,我们来看Android里的查询语句query().

contentResolver.query(
Uri uri,
String[] projection,
String[] selection,
String[] selectionArgs,
String sortOrder);

uri 是表名

projection 是要返回的列名数组

selection 是约束条件,相当于WHERE关键字后面的语句,如 name  LIKE 'J%’ (注意:sqlite中字符串是以单引号' '包含起来的)

selectionArgs 该数组中的String用于依次替代seletion中含有的?号(例如,selection语句    name = ? AND phOne= ?    中含有两个?号,那么selectionArgs里就需要引入两个String参数,如new String[ ]{myName,myPhone})

sortOrder 所返回数据的排序方式


——————————————————

好了,进入正题:

以下程序实现,为AndroidTest这个程序添加一首曲名以“sorry sorry”结束的音乐背景。

该音乐在该Activity进入onCreat( )和onRestart( )状态下开始播放,在该Activity进入onStop()状态下停止播放。

package keNan.com.test;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;

/**
* @ClassName: AndroidTestActivity
* @Description: Set a background music for this Activity.
* @author 慢跑学Android
* @date 2011-11-22 下午04:12:00
*
*/
public class AndroidTestActivity extends Activity {
private MediaPlayer mediaPlayer;
private final Uri musicTableForSD = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
private final String musicTitle = MediaStore.Audio.AudioColumns.TITLE;
private final String musicId = MediaStore.Audio.Media._ID;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

playBackgroundMusic();
}


@Override
protected void onRestart() {
super.onRestart();

playBackgroundMusic();
}


@Override
protected void onStop() {
super.onStop();

stopMusic();
}


private void playBackgroundMusic() {
// Get a ContentResovler,
// so that we can read the music information form SD card.
ContentResolver cOntentResolver= getContentResolver();
String musicName = "%sorry sorry";
Cursor cursor = contentResolver.query(
musicTableForSD,
new String[]{musicId,musicTitle},
musicTitle + " LIKE ?",
new String[]{musicName},
null);
// If cursor has a recode, we support that we find the music.
if (cursor.moveToNext()) {
// Get the music id.
int position = cursor.getInt(cursor.getColumnIndex(musicId));
Uri uri = Uri.withAppendedPath(musicTableForSD, "/" + position);
mediaPlayer = MediaPlayer.create(this, uri);
if (null != mediaPlayer) {
mediaPlayer.start();
}
}
// Finish our query work.
cursor.close();
}

private void stopMusic() {
if (null != mediaPlayer) {
mediaPlayer.stop();
mediaPlayer.release();
}
}
}

参考资料:

Android 获取sdcard音乐文件

Android 中数据库查询方法query()中的selectionArgs的用法

新手教程:Android内置的SQLite操作方法





推荐阅读
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
author-avatar
痴情季豪_726
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有