实例介绍
【实例简介】主要用Android开了一个音频播放器,可以播放自己存储的歌曲!
【实例截图】
【实例截图】
【核心代码】
package us.imnet.iceskysl; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import us.imnet.iceskysl.service.YPRService; import us.imnet.iceskysl.util.PreferencesUtil; import us.imnet.iceskysl.util.Tools; import us.imnet.iceskysl.xspf.Parser; import us.imnet.iceskysl.xspf.Playlist; import us.imnet.iceskysl.xspf.Track; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; public class PlayListActivity extends Activity implements OnItemClickListener { public final String TAG = "main"; // Identifiers for option menu items private static final int PLAY_NEXT = Menu.FIRST 1; private static final int PLAY_STOP = PLAY_NEXT 1; private static final int PLAY_PREV = PLAY_STOP 1; Playlist playlist = null; public String _id = ""; public String _name = ""; public String _type = ""; public boolean is_valid = false; private YPRSInterface mpInterface; int player_position = 0; private String session = ""; ListView itemlist = null; public String url = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.playlist); revParams(); setTitle("Yobo: " _name); session = Tools.getSessionInPerence(this); itemlist = (ListView) findViewById(R.id.itemlist); fetch_datas(); } private void fetch_datas() { // 1.构造需要的数据 long timestamp = System.currentTimeMillis(); String nonce = Tools.md5(String.valueOf(System.currentTimeMillis()) PreferencesUtil.api_secret); Hashtable<String, String> params = new Hashtable<String, String>(); params.put("api_key", PreferencesUtil.api_key); params.put("nonce", nonce); params.put("timestamp", String.valueOf(timestamp)); params.put("token", session); params.put("id", _id); // 2.对参数进行签名 String api_sig = Tools.md5(Tools.sig_params(params) PreferencesUtil.api_secret); // 4.转换参数格式 String params_str = Tools.paramsToString(params) "api_sig=" api_sig; // Parser parser = new Parser(url "?" params_str); try { parser.parse(); playlist = parser.getPlaylist(); this.bindService( new Intent(PlayListActivity.this, YPRService.class), mConnection, Context.BIND_AUTO_CREATE); } catch (Exception e) { e.printStackTrace(); } } private List<Map<String, Object>> buildPlayListForSimpleAdapter() { try { mpInterface.clearPlaylist(); if (playlist != null) { List songs = playlist.getTracks(); Log.i("buildBoxListForSimpleAdapter", String.valueOf(songs .size())); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>( songs.size()); Iterator<Map<String, Object>> l = songs.iterator(); while (l.hasNext()) { Track track = (Track) l.next(); mpInterface.addSongPlaylist(track.getLocation()); Map<String, Object> map = new HashMap<String, Object>(); Log.i("buildBoxListForSimpleAdapter", "name=" track.getTitle()); map.put("name", track.getTitle()); map.put("album", track.getAlbum()); map.put("artist", track.getArtist()); map.put("img", R.drawable.album_small); list.add(map); } return list; } } catch (RemoteException e) { Log.e(getString(R.string.app_name), e.getMessage()); } return null; } // 接收传递进来的播放列表信息 private void revParams() { Intent startingIntent = getIntent(); if (startingIntent != null) { Bundle playlist = startingIntent .getBundleExtra("android.intent.extra.playlist"); if (playlist == null) { is_valid = false; } else { _id = playlist.getString("id"); _name = playlist.getString("name"); _type = playlist.getString("type"); is_valid = true; // if ("box".equalsIgnoreCase(_type)) { url = PreferencesUtil.baseUrl PreferencesUtil.boxes_playlist; } else { url = PreferencesUtil.baseUrl PreferencesUtil.station_playlist; } Log.i("url", url); } } else { is_valid = false; } } private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { mpInterface = YPRSInterface.Stub.asInterface((IBinder) service); updateSongList(); } public void onServiceDisconnected(ComponentName className) { mpInterface = null; } }; @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { Log.i("onListItemClick:", Integer.toString(position)); try { Toast.makeText(PlayListActivity.this, R.string.remote_service_connected, Toast.LENGTH_SHORT).show(); player_position = position; mpInterface.playFile(position); itemlist.setSelector(R.color.translucent_red); } catch (RemoteException e) { Log.e(getString(R.string.app_name), e.getMessage()); } } // 更新歌曲列表S public void updateSongList() { List<Map<String, Object>> list = buildPlayListForSimpleAdapter(); Log.i("refreshBoxListItems", "size=" String.valueOf(list.size())); SimpleAdapter playlist = new SimpleAdapter(this, list, R.layout.song_row, new String[] { "name", "album", "artist", "img" }, new int[] { R.id.name, R.id.album, R.id.artist, R.id.img }); // setListAdapter(boxes); itemlist.setAdapter(playlist); itemlist.setOnItemClickListener(this); itemlist.setSelection(0); } // 初始化菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, PLAY_NEXT, 0, R.string.player_next).setIcon( R.drawable.player_fwd).setAlphabeticShortcut('N'); menu.add(0, PLAY_PREV, 0, R.string.player_prev).setIcon( R.drawable.player_rew).setAlphabeticShortcut('P'); menu.add(0, PLAY_STOP, 0, R.string.player_stop).setIcon( R.drawable.player_stop).setAlphabeticShortcut('S'); return true; } // 当一个菜单被选中的时候调用 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case PLAY_NEXT: try { mpInterface.skipForward(); itemlist.setSelector(R.color.translucent_red); } catch (RemoteException e) { e.printStackTrace(); } return true; case PLAY_PREV: try { mpInterface.skipBack(); itemlist.setSelector(R.color.translucent_red); } catch (RemoteException e) { e.printStackTrace(); } case PLAY_STOP: try { mpInterface.stop(); } catch (RemoteException e) { e.printStackTrace(); } } return true; } public void onDestroy() { Log.d(TAG, "onDestroy."); super.onDestroy(); unbindService(mConnection); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论