由於公司最近要開發一個鬧鐘,需要提供選擇系統內建鈴聲和自訂鈴聲的功能,先做了一個最簡單的demo
package com.example.mymusiclist;import java.util.ArrayList;import java.util.List;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { List<String> list_ringtone = new ArrayList<String>(); List<String> list_ringtonePath = new ArrayList<String>(); List<String> list_music = new ArrayList<String>(); List<String> list_musicPath = new ArrayList<String>(); List<String> list_alarm = new ArrayList<String>(); List<String> list_alarmPath = new ArrayList<String>(); List<String> list_notification = new ArrayList<String>(); List<String> list_notificationPath = new ArrayList<String>(); private ListView lv_listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initWidget(); } //執行個體化控制項 private void initWidget(){ lv_listview = (ListView) this.findViewById(R.id.listView1); MyBaseAdapter mba = new MyBaseAdapter(list_music);// MyBaseAdapter mba = new MyBaseAdapter(list_ringtone);// MyBaseAdapter mba = new MyBaseAdapter(list_notification);// MyBaseAdapter mba = new MyBaseAdapter(list_alarm); lv_listview.setAdapter(mba); } //初始化資料 private void initData(){// getAllMusic();// scannerMediaFile(); } /** * 掃描android的系統鈴聲 */ private void scannerMediaFile() { //notification ContentResolver cr = this.getContentResolver(); Cursor cursor = cr.query(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE }, "is_notification != ?", new String[] { "0" }, "_id asc"); if (cursor == null) { return; } while (cursor.moveToNext()) { list_notification.add(cursor.getString(1)); } //alarm cursor = cr.query(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE }, "is_alarm != ?", new String[] { "0" }, "_id asc"); if (cursor == null) { return; } while (cursor.moveToNext()) { list_alarm.add(cursor.getString(1)); } //ringtone cursor = cr.query(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE }, "is_ringtone != ?", new String[] { "0" }, "_id asc"); if (cursor == null) { return; } while (cursor.moveToNext()) { list_ringtone.add(cursor.getString(1)); } //music cursor = cr.query(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE }, "is_music != ?", new String[] { "0" }, "_id asc"); if (cursor == null) { return; } while (cursor.moveToNext()) { list_music.add(cursor.getString(1)); } cursor.close(); } /** * 擷取android手機中全部的音樂 */ private void getAllMusic(){ ContentResolver cr = getContentResolver(); //ContentProvider只能由ContentResolver發送請求 Uri AUDIO_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;// Uri AUDIO_URI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; //擷取音頻檔案的URI, //視頻 MediaStore.Video.Media.EXTERNAL_CONTENT_URI //圖片MediaStore.Images.Media.EXTERNAL_CONTENT_URI String[] columns = new String[] {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA};//查詢的欄位 //要讀的列名,這些常量可以查GOOGLE官方開發文檔,TITLE是標題 DATA是路徑 Cursor cursor = cr.query(AUDIO_URI, columns, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);//查詢// Cursor cursor = cr.query(AUDIO_URI, columns, MediaStore.Audio.Media.DURATION+">?", new String[]{"10000"}, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);//帶where的查詢 //跟查詢SQL一樣了,除了第一個參數不同外.後面根據時間長度過濾小於10秒的檔案 if(cursor != null){ while(cursor.moveToNext()){ //迴圈讀取第一列,即檔案路徑,0列是標題 list_music.add(cursor.getString(1));// list_musicPath.add(cursor.getString(1)); } cursor.close(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } private class MyBaseAdapter extends BaseAdapter{ private List<String> Data; public MyBaseAdapter(List<String> data){ this.Data = data; } @Override public int getCount() { return this.Data.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @Override public View getView(int position, View converView, ViewGroup arg2) { ViewHodler viewHodler; if(converView == null){ viewHodler = new ViewHodler(); converView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.test_tem_textview, null); viewHodler.ringName = (TextView) converView.findViewById(R.id.textView1); converView.setTag(viewHodler); }else{ viewHodler = (ViewHodler) converView.getTag(); } viewHodler.ringName.setText(this.Data.get(position)); return converView; } } private class ViewHodler{ TextView ringName; } }
: