之所以选择android音乐播放器开发,是因为这里面涉及到了android的四大核心核心组件:Activity,Service,ContentProvider,BroadCast Receiver。对于学习理解这几大组件有着非常实际意义,而且再加上网络歌曲的播放,网络部分也会涉及到,所以还是很全面的一个练手项目。
先来分析一个手机音乐播放器应该具备的基础功能,1、显示SD卡或手机内存的歌曲 2、点击歌曲开始播放 3、上一首下一首快进快推 4、扫描歌曲 等
下面开始新建一个android项目,AndroidMusicPlayer:
主页面使用GridView来实现,既方便也简单。MainActivity代码如下:
package com.android.musicplayer.activity; import com.android.musicplayer.adapter.GridViewAdapter; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.view.KeyEvent; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; /** * @author Administrator * 主页面,使用GridView */ public class MainActivity extends Activity { private GridView gridView; private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView) findViewById(R.id.activity_main_gridview); gridView.setAdapter(new GridViewAdapter(this)); gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { switch (arg2) { case 0: intent = new Intent(MainActivity.this, AlbumActivity.class); startActivity(intent); break; case 1: intent = new Intent(MainActivity.this, SongsActivity.class); startActivity(intent); break; case 2: intent = new Intent(MainActivity.this, ArtistActivity.class); startActivity(intent); break; case 3: intent = new Intent(MainActivity.this, GenreActivity.class); startActivity(intent); break; case 4: intent = new Intent(MainActivity.this, RecentlyActivity.class); startActivity(intent); break; case 5: intent = new Intent(MainActivity.this, SettingActivity.class); startActivity(intent); break; default: break; } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("退出魔音"); builder.setIcon(R.drawable.dialog_alert_icon); builder.setMessage("要退出魔音吗?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }).setNegativeButton("取消", null).show(); } return true; } }同样的,需要使用Adapter来完成绑定,我们自定义一个Adapter继承自BaseAdapter。GridViewAdapter:
/** * */ package com.android.musicplayer.adapter; import com.android.musicplayer.activity.R; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; /** * @author Administrator * @description 主页面的adapter,用来显示gridview */ public class GridViewAdapter extends BaseAdapter { private Context mContext; private Integer[] mThumbIds = { R.drawable.albums, R.drawable.songs, R.drawable.artists, R.drawable.genre, R.drawable.recent, R.drawable.setting}; public GridViewAdapter(Context context) { mContext = context; } /* * @see android.widget.Adapter#getCount() */ @Override public int getCount() { return mThumbIds.length; } /* * @see android.widget.Adapter#getItem(int) */ @Override public Object getItem(int arg0) { return null; } /* * @see android.widget.Adapter#getItemId(int) */ @Override public long getItemId(int arg0) { return 0; } /* * @see android.widget.Adapter#getView(int, android.view.View, * android.view.ViewGroup) */ @Override public View getView(int arg0, View arg1, ViewGroup arg2) { ImageView imageView; if (arg1 == null) { imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(175, 175)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) arg1; } imageView.setImageResource(mThumbIds[arg0]); return imageView; } }xml布局代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/main_bg" tools:context=".MainActivity" > <GridView android:id="@+id/activity_main_gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="2" android:stretchMode="columnWidth" android:verticalSpacing="50dp" /> </RelativeLayout>效果如下:
主页面完成,之后就是如何获取歌曲列表,专辑列表,艺术家列表等。下一篇将说明如何实现。