新建项目:
1 New Android Project-> 2 Project name:androidPlayer 3 Build Target:Android 2.2 4 Application name: androidPlayer 5 Package name:com.b510 6 Create Activity:PlayActivity 7 Min SDK Version:9 8 Finish
项目结构:
运行效果:
代码部分:
AndroidManifast.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="cn.itcast.audio" 4 android:versionCode="1" 5 android:versionName="1.0"> 6 <uses-sdk android:minSdkVersion="8" /> 7 8 <application android:icon="@drawable/icon" android:label="@string/app_name"> 9 <activity android:name=".PlayActivity" 10 android:label="@string/app_name"> 11 <intent-filter> 12 <action android:name="android.intent.action.MAIN" /> 13 <category android:name="android.intent.category.LAUNCHER" /> 14 </intent-filter> 15 </activity> 16 17 </application> 18 <!-- sdcard权限 --> 19 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> 20 </uses-permission> 21 </manifest>
strings.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="hello">Hello World, PlayActivity!</string> 4 <string name="app_name">音乐播放器</string> 5 <string name="filename">文件名称</string> 6 <string name="play">播放</string> 7 <string name="pause">暂停</string> 8 <string name="continue1">继续</string> 9 <string name="reset">重播</string> 10 <string name="stop">停止</string> 11 <string name="musicname">shiqi.mp3</string> 12 </resources>
main.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/filename" 11 /> 12 <EditText 13 android:id="@+id/filename" 14 android:layout_width="fill_parent" 15 android:layout_height="wrap_content" 16 android:text="@string/musicname" 17 /> 18 <LinearLayout 19 android:orientation="horizontal" 20 android:layout_width="fill_parent" 21 android:layout_height="wrap_content" 22 > 23 <Button 24 android:id="@+id/play" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:text="@string/play" 28 /> 29 <Button 30 android:id="@+id/pause" 31 android:layout_width="wrap_content" 32 android:layout_height="wrap_content" 33 android:text="@string/pause" 34 /> 35 <Button 36 android:id="@+id/reset" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:text="@string/reset" 40 /> 41 <Button 42 android:id="@+id/stop" 43 android:layout_width="wrap_content" 44 android:layout_height="wrap_content" 45 android:text="@string/stop" 46 /> 47 </LinearLayout> 48 </LinearLayout>
PlayActivity.java
1 package com.b510; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import android.app.Activity; 7 import android.media.MediaPlayer; 8 import android.os.Bundle; 9 import android.os.Environment; 10 import android.util.Log; 11 import android.view.View; 12 import android.view.View.OnClickListener; 13 import android.widget.Button; 14 import android.widget.EditText; 15 16 public class MainActivity extends Activity { 17 protected static final String TAG = "MainActivity"; 18 /** 文件名称 */ 19 private EditText et_filename; 20 /** 播放按钮 */ 21 private Button btn_play; 22 /** 暂停按钮 */ 23 private Button btn_pause; 24 /** 重播按钮 */ 25 private Button btn_reset; 26 /** 停止按钮 */ 27 private Button btn_stop; 28 /** 得到文件名称 */ 29 private String filename; 30 /** 定义一个播放器对象 */ 31 private MediaPlayer mediaPlayer; 32 /** 保存当前音乐播放点 */ 33 private int currentPosition; 34 35 /** Called when the activity is first created. */ 36 @Override 37 public void onCreate(Bundle savedInstanceState) { 38 super.onCreate(savedInstanceState); 39 setContentView(R.layout.main); 40 mediaPlayer = new MediaPlayer(); 41 42 et_filename = (EditText) findViewById(R.id.et_filename); 43 44 btn_play = (Button) findViewById(R.id.btn_play); 45 btn_pause = (Button) findViewById(R.id.btn_pause); 46 btn_reset = (Button) findViewById(R.id.btn_reset); 47 btn_stop = (Button) findViewById(R.id.btn_stop); 48 49 btn_play.setOnClickListener(listener); 50 btn_pause.setOnClickListener(listener); 51 btn_reset.setOnClickListener(listener); 52 btn_stop.setOnClickListener(listener); 53 } 54 55 /** 56 * 当MainActivity调用onDestroy方法的时候</br> 57 * 播放器释放资源 58 */ 59 @Override 60 protected void onDestroy() { 61 super.onDestroy(); 62 mediaPlayer.release(); 63 } 64 65 /** 66 * 定义按钮的监听器 67 */ 68 private OnClickListener listener = new OnClickListener() { 69 70 public void onClick(View v) { 71 Button button = (Button) v; 72 try { 73 switch (v.getId()) { 74 case R.id.btn_play: 75 play(); 76 break; 77 case R.id.btn_pause: 78 if (mediaPlayer.isPlaying()) { 79 mediaPlayer.pause(); 80 button.setText(R.string.continues); 81 } else { 82 mediaPlayer.start(); 83 button.setText(R.string.pause); 84 } 85 break; 86 case R.id.btn_reset: 87 if (mediaPlayer.isPlaying()) { 88 mediaPlayer.seekTo(0); 89 } else { 90 play(); 91 } 92 break; 93 case R.id.btn_stop: 94 if (mediaPlayer.isPlaying()) { 95 mediaPlayer.stop(); 96 } 97 break; 98 } 99 } catch (IOException e) { 100 Log.i(TAG, e.toString()); 101 } 102 } 103 }; 104 /** 105 * 把播放动作抽出来,当度定义为play方法 106 * @throws IOException 107 */ 108 private void play() throws IOException { 109 filename = et_filename.getText().toString(); 110 File androidFile = new File(Environment.getExternalStorageDirectory(), 111 filename); 112 mediaPlayer.reset(); 113 mediaPlayer.setDataSource(androidFile.getAbsolutePath()); 114 mediaPlayer.prepare(); 115 mediaPlayer.start(); 116 } 117 118 /** 119 * 如果突然电话到来,此时就停止播放音乐 120 */ 121 @Override 122 protected void onPause() { 123 super.onPause(); 124 //如果音乐正在播放,则取得音乐的当前位置 125 if(mediaPlayer.isPlaying()){ 126 currentPosition=mediaPlayer.getCurrentPosition(); 127 mediaPlayer.stop(); 128 } 129 } 130 131 /** 132 * 如果电话结束了,就应该恢复当前播放 133 */ 134 @Override 135 protected void onResume() { 136 super.onResume(); 137 //如果当前的播放帧currentPosition>0并且播放音乐文件名称不为空 138 //就恢复当前播放,并且把currentPosition位置设置到0,以便下次使用 139 if(currentPosition>0&&filename!=null){ 140 try { 141 play(); 142 mediaPlayer.seekTo(currentPosition); 143 currentPosition=0; 144 } catch (IOException e) { 145 e.printStackTrace(); 146 } 147 } 148 } 149 150 /** 151 * 在系统杀死activity后,当用户接完电话后,会重新回到这个activity</br> 152 * 系统会自动帮我们创建这个activity,先执行onCreate()方法</br> 153 * 在执行onRestoreInstanceState()方法,我们在这个方法中</br> 154 * Bundle中保存的数据恢复 155 */ 156 @Override 157 protected void onRestoreInstanceState(Bundle savedInstanceState) { 158 super.onRestoreInstanceState(savedInstanceState); 159 filename=savedInstanceState.getString("filename"); 160 currentPosition=savedInstanceState.getInt("currentPosition"); 161 } 162 163 /** 164 * 当一些位置情况发生的时候,导致Activity不可见了</br> 165 * 系统可能会杀死掉这个activity,如果我们想再系统杀死activity</br> 166 * 之前缓存一些需要的数据,这里保存的数据是播放的文件和当前播放的位置 167 */ 168 @Override 169 protected void onSaveInstanceState(Bundle outState) { 170 super.onSaveInstanceState(outState); 171 outState.putString("filename", filename); 172 outState.putInt("currentPosition", currentPosition); 173 } 174 }
============================================
android sdcard配置
步骤1:
mksdcard -l mycard 100M E:\android_sdcard.img 如果你的环境变量配置正确,输入这句命令就建立了一个100M的虚拟SD-Card。
命令分析:-l mycard ,-l 后面跟的是磁盘卷标,如g就代表g盘,卷标可以随便写自己喜欢的名字。
100M 为虚拟SD-card大小,可以写M(兆),也可以写K随自己喜欢,只要一个够自己用的大小就可以了,还要注意你放置虚拟card的空间,必须要大于你的虚拟card。
E:\android_sdcard.img 虚拟card目录和文件名,目录随自己喜欢放置,android_card.img虚拟card文件名,名字随自己喜欢写,后缀名也随自己喜欢随便命名,如(.abc)。
步骤2:
在Eclipse中配置
SD Card:File
Hardware:new -- >SD Card support
6.2.window-- >Preferences-- >Android-- >Launch
点击Apply,再点击ok,
这样android的sdcard就在eclipse中配置好了。
启动刚才配置好的模拟器AVD2.3.1,打开File Explorer,就会出现sdcard,点击右上角的导入图标,把shiqi.mp3导入进去。