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

来源:互联网 发布:化工仿真软件 编辑:程序博客网 时间:2024/06/03 19:29

在讲主题之前,我们先补充一点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();    }            @Overrideprotected void onRestart() {super.onRestart();playBackgroundMusic();}@Overrideprotected 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操作方法




原创粉丝点击