Android下MP3播放器的实现源代码01
16lz
2021-01-23
第一个类AlbumActivity
第二个类AlbumListAdapter
第三个类ArtistActivity
第四个类 ArtistListAdapter
第五个类ClicksActivity
第六个类DBHelper
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;@Overrideprotected 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;}@Overridepublic int getCount() {return albums.length;}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;@Overrideprotected 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;}@Overridepublic int getCount() {return artists.length;}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;//当前音量@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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);}@Overridepublic 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;}}@Overridepublic void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {}}
更多相关文章
- Android录音时,根据PCM数据获取音量值(单位分贝)
- Android统计EditText的字母数字以及汉字的统计方法
- android中流的理解。(字节流读写与字符流的读写)
- Android7.0 设置音量最小时有声音输出
- AudioManager音量控制
- android中限制EditText最大输入字节数
- android audioManager获取音量