第一个类AlbumActivity
package com.alex.media;import com.alex.media.ArtistActivity.ListItemClickListener;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.provider.MediaStore;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;public class AlbumActivity extends Activity { private int[] _ids; private String[]_titles; private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = this.getIntent(); String albumName; albumName = intent.getExtras().getString("albums"); listview = new ListView(this); Cursor c = this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME}, MediaStore.Audio.Media.ALBUM + "='" + albumName+"'", null, null); c.moveToFirst(); _ids = new int[c.getCount()]; _titles = new String[c.getCount()]; for(int i=0;i<c.getCount();i++){ _ids[i] = c.getInt(3); _titles[i] = c.getString(0); c.moveToNext(); } listview.setAdapter(new MusicListAdapter(this, c)); listview.setOnItemClickListener(new ListItemClickListener()); LinearLayout list = new LinearLayout(this); list.setBackgroundResource(R.drawable.listbg); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); list.addView(listview,params); setContentView(list); } class ListItemClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { // TODO Auto-generated method stub Intent intent = new Intent(AlbumActivity.this,MusicActivity.class); intent.putExtra("_ids", _ids); intent.putExtra("_titles", _titles); intent.putExtra("position", position); startActivity(intent); finish(); } }}
第二个类AlbumListAdapter
package com.alex.media;import java.util.HashMap;import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.provider.MediaStore;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class AlbumListAdapter extends BaseAdapter{ private Context myCon; private String[] albums; private HashMap<String, String> myMap; public AlbumListAdapter(Context con,String[] str1, HashMap<String, String> map){ myCon = con; albums = str1; myMap = map; } @Override public int getCount() { return albums.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(myCon).inflate(R.layout.albumslist, null); /** * 设置专辑名 */ TextView album = (TextView)convertView.findViewById(R.id.album); if (albums[position].length()>24){ try { String albumName = bSubstring(albums[position],24); album.setText(albumName); } catch (Exception e) { e.printStackTrace(); } } else { album.setText(albums[position]); } /** * 设置艺术家姓名 */ TextView artist = (TextView)convertView.findViewById(R.id.mysinger); if (myMap.get(albums[position]).equals("<unknown>")){ artist.setText("未知艺术家"); } else{ artist.setText(myMap.get(albums[position])); } ImageView Albumsitem = (ImageView)convertView.findViewById(R.id.Albumsitem); Albumsitem.setImageResource(R.drawable.album); return convertView; } /** * 字符串裁剪 * @param s * @param length * @return * @throws Exception */ public static String bSubstring(String s, int length) throws Exception { byte[] bytes = s.getBytes("Unicode"); int n = 0; // 表示当前的字节数 int i = 2; // 要截取的字节数,从第3个字节开始 for (; i < bytes.length && n < length; i++) { // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节 if (i % 2 == 1) { n++; // 在UCS2第二个字节时n加1 } else { // 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节 if (bytes[i] != 0) { n++; } } } // 如果i为奇数时,处理成偶数 if (i % 2 == 1) { // 该UCS2字符是汉字时,去掉这个截一半的汉字 if (bytes[i - 1] != 0) i = i - 1; // 该UCS2字符是字母或数字,则保留该字符 else i = i + 1; } return new String(bytes, 0, i, "Unicode"); } }
第三个类ArtistActivity
package com.alex.media;import com.alex.media.RecentlyActivity.ListItemClickListener;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.database.Cursor;import android.media.AudioManager;import android.os.Bundle;import android.provider.MediaStore;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;public class ArtistActivity extends Activity { private int[] _ids; private String[]_titles; private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = this.getIntent(); String artistName; if (intent.getExtras().getString("artist").equals("未知艺术家")){ artistName = "<unknown>"; } else{ artistName = intent.getExtras().getString("artist"); } listview = new ListView(this); Cursor c = this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME}, MediaStore.Audio.Media.ARTIST + "='" + artistName+"'", null, null); c.moveToFirst(); _ids = new int[c.getCount()]; _titles = new String[c.getCount()]; for(int i=0;i<c.getCount();i++){ _ids[i] = c.getInt(3); _titles[i] = c.getString(0); c.moveToNext(); } listview.setAdapter(new MusicListAdapter(this, c)); listview.setOnItemClickListener(new ListItemClickListener()); LinearLayout list = new LinearLayout(this); list.setBackgroundResource(R.drawable.listbg); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); list.addView(listview,params); setContentView(list); } class ListItemClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { // TODO Auto-generated method stub Intent intent = new Intent(ArtistActivity.this,MusicActivity.class); intent.putExtra("_ids", _ids); intent.putExtra("_titles", _titles); intent.putExtra("position", position); startActivity(intent); finish(); } }}
第四个类 ArtistListAdapter
package com.alex.media;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class ArtistListAdapter extends BaseAdapter{ private Context myCon; private String[] artists; public ArtistListAdapter(Context con,String[] str1){ myCon = con; artists = str1; } @Override public int getCount() { return artists.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(myCon).inflate(R.layout.artistslist, null); //设置艺术家姓名 TextView artist = (TextView)convertView.findViewById(R.id.artist); artist.setText(artists[position]); //设置列表项图标 ImageView Artistsitem = (ImageView)convertView.findViewById(R.id.Artistsitem); Artistsitem.setImageResource(R.drawable.artist); return convertView; }}
第五个类ClicksActivity
package com.alex.media;import com.alex.media.ListActivity.ListItemClickListener;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.database.Cursor;import android.media.AudioManager;import android.os.Bundle;import android.provider.MediaStore;import android.view.KeyEvent;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.AdapterView.OnItemClickListener;import android.widget.LinearLayout.LayoutParams;public class ClicksActivity extends Activity { private DBHelper dbHelper = null; private ListView listview; private int[] _ids; private String[]_titles; Cursor cursor = null; int[] music_id; //关于音量的变量 private AudioManager mAudioManager = null; private int maxVolume;//最大音量 private int currentVolume;//当前音量 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); dbHelper = new DBHelper(this, "music.db", null, 2); cursor = dbHelper.queryByClicks(); cursor.moveToFirst(); int num; if (cursor!=null){ num = cursor.getCount(); } else{ return; } String idString =""; if (num>=10){ for(int i=0;i<10;i++){ music_id = new int[10]; music_id[i]=cursor.getInt(cursor.getColumnIndex("music_id")); if (i<9){ idString = idString+music_id[i]+","; } else{ idString = idString+music_id[i]; } cursor.moveToNext(); } }else if(num>0){ for(int i=0;i<num;i++){ music_id = new int[num]; music_id[i]=cursor.getInt(cursor.getColumnIndex("music_id")); if (i<num-1){ idString = idString+music_id[i]+","; } else{ idString = idString+music_id[i]; } cursor.moveToNext(); } } System.out.println(idString); if (cursor!=null){ cursor.close(); cursor=null; } listview = new ListView(this); Cursor c = this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME} , MediaStore.Audio.Media._ID + " in ("+ idString + ")", null, null); c.moveToFirst(); _ids = new int[c.getCount()]; _titles = new String[c.getCount()]; for(int i=0;i<c.getCount();i++){ _ids[i] = c.getInt(3); _titles[i] = c.getString(0); c.moveToNext(); } listview.setAdapter(new MusicListAdapter(this, c)); listview.setOnItemClickListener(new ListItemClickListener()); mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//获得最大音量 currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);//获得当前音量 LinearLayout list = new LinearLayout(this); list.setBackgroundResource(R.drawable.listbg); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); list.addView(listview,params); setContentView(list); } class ListItemClickListener implements OnItemClickListener{ @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { // TODO Auto-generated method stub Intent intent = new Intent(ClicksActivity.this,MusicActivity.class); intent.putExtra("_ids", _ids); intent.putExtra("_titles", _titles); intent.putExtra("position", position); startActivity(intent); finish(); } } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == event.KEYCODE_BACK) { Intent intent = new Intent(); intent.setClass(this, MainActivity.class); startActivity(intent); finish(); } return true; } public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_UP) { if (currentVolume<maxVolume){ currentVolume = currentVolume + 1; mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0); } else { mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0); } } return false; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_UP) { if (currentVolume>0){ currentVolume = currentVolume - 1; mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume , 0); } else { mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, currentVolume, 0); } } return false; default: return super.dispatchKeyEvent(event); } }}
第六个类DBHelper
package com.alex.media;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase.CursorFactory;public class DBHelper extends SQLiteOpenHelper { private Cursor c = null; private static final String CREATE_TAB = "create table " + "music(_id integer primary key autoincrement,music_id integer,clicks integer," + "latest text)"; private static final String TAB_NAME = "music"; private SQLiteDatabase db = null; public DBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { this.db = db; db.execSQL(CREATE_TAB); } public void insert(ContentValues values){ SQLiteDatabase db = getWritableDatabase(); db.insert(TAB_NAME, null, values); } public void update(ContentValues values,int id){ SQLiteDatabase db = getWritableDatabase(); db.update(TAB_NAME, values, "music_id="+id, null); } public void delete(int id){ if (db == null){ db = getWritableDatabase(); } db.delete(TAB_NAME, "music_id=?", new String[]{String.valueOf(id)}); } public Cursor query(int id){ SQLiteDatabase db = getReadableDatabase(); c = db.query(TAB_NAME, null, "music_id=?", new String[]{String.valueOf(id)}, null, null, null); return c; } public Cursor queryByClicks(){//按点击量查询 SQLiteDatabase db = getReadableDatabase(); c = db.query(TAB_NAME, null, null, null, null, null, "clicks desc"); return c; } public Cursor queryRecently(){//按时间降序查询 SQLiteDatabase db = getReadableDatabase(); c = db.query(TAB_NAME, null, null, null, null, null, "latest desc"); return c; } public void close(){ if (db != null){ db.close(); db=null; } if (c!=null){ c.close(); c=null; } } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { }}