在讲主题之前,我们先补充一点sqlite查询语句的知识(Android的数据库就是采用sqlite)。
一个很有用的关系操作符是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到多个字符匹配。下划线(_)可与任意单个字符匹配。
语句说明:该语句会返回foods表中的id和name这两列的数据。其中,返回的数据必须满足:数据在name这一个属性上,是以J开头的字符串。
与之对应的,我们来看Android里的查询语句query().
contentResolver.query( Uri uri, String[] projection, String[] selection, String[] selectionArgs, String sortOrder);
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操作方法