mp3播放器(五)(TabActivity的分页显示效果+读取sdcard里的mp3文件)

需要有三个activity
同时在manifest里面注册

一个大的MainActivity管理两个分页面,分别是Mp3ListActivity和LocalListActivity

MainActivity.java

 1 package com.example.mp3player00;
 2 
 3 
 4 import android.app.TabActivity;
 5 import android.content.Intent;
 6 import android.os.Bundle;
 7 import android.widget.TabHost;
 8 
 9 public class MainActivity extends TabActivity {
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         // TODO Auto-generated method stub
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.main);
16         //得到TabHost对象,对TabActivity的操作通常由这个操作
17         TabHost tabHost=getTabHost();
18         //启动一个intent对象,将Mp3ListActivity传入
19         Intent Mp3ListActivityIntent=new Intent();
20         Mp3ListActivityIntent.setClass(this,Mp3ListActivity.class );
21         //内部类 TabSpec代表一个标签
22         TabHost.TabSpec spec=tabHost.newTabSpec("remote");
23         //设置图标,参数一:字。 参数二:图标。
24         spec.setIndicator("remote",getResources().getDrawable(android.R.drawable.stat_sys_download));
25         //设置内容
26         spec.setContent(Mp3ListActivityIntent);
27         //将标签放入host中
28         tabHost.addTab(spec);
29         
30         //设置第二个页面
31         Intent LocalListIntent=new Intent();
32         LocalListIntent.setClass(this,LocalListActivity.class );
33         //内部类 TabSpec代表一个标签
34         TabHost.TabSpec spec2=tabHost.newTabSpec("local");
35         //设置图标,参数一:字。 参数二:图标。
36         spec2.setIndicator("local",getResources().getDrawable(android.R.drawable.stat_sys_upload));
37         //设置内容
38         spec2.setContent(LocalListIntent);
39         //将标签放入host中
40         tabHost.addTab(spec2);
41     }
42 
43 
44 }


LocalActvity.java

 1 package com.example.mp3player00;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.Iterator;
 6 import java.util.List;
 7 
 8 import model.Mp3Info;
 9 
10 import utils.FileUtils;
11 import android.app.ListActivity;
12 import android.os.Bundle;
13 import android.widget.SimpleAdapter;
14 
15 public class LocalListActivity extends ListActivity{
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         
20         super.onCreate(savedInstanceState);
21     
22     }
23 // 为什么不放入在onCrreate里面呢,是因为onCreate是打开这个程序时才执行,并不是及时性的,如果下载一个新的不能及时更新
24     @Override
25     protected void onResume() {
26         setContentView(R.layout.local_mp3_list);
27         //得到
28         FileUtils fileUtils=new FileUtils();
29         List<Mp3Info> mp3Infos=fileUtils.getMp3Files("mp3/");
30         
31         List<HashMap<String,String>> list= new ArrayList<HashMap<String,String>>();
32         //将Mp3Info迭代出来
33         for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
34             Mp3Info mp3Info = (Mp3Info) iterator.next();
35             System.out.println("local---->"+mp3Info);
36             HashMap map=new HashMap<String,String>();
37             map.put("mp3_name", mp3Info.getMp3Name());
38             map.put("mp3_size", mp3Info.getMp3Size());
39             list.add(map);//将每一行添加到list中
40             
41         }
42         //创建adapter
43         SimpleAdapter simpleAdapter=
44        new SimpleAdapter
(this, list, R.layout.mp3info_item, new String[]{"mp3_name","mp3_size"}, new int[]{R.id.mp3_name,R.id.mp3_size}); 45 setListAdapter(simpleAdapter); 46 super.onResume(); 47 } 48 49 }


FileUtils.java

  1 package utils;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.OutputStream;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 
 11 import model.Mp3Info;
 12 
 13 import android.os.Environment;
 14 
 15 public class FileUtils {
 16     private String SDPATH;
 17 
 18     public String getSDPATH() {
 19         return SDPATH;
 20     }
 21     public FileUtils() {
 22         //得到当前外部存储设备的目录
 23         // /SDCARD
 24         SDPATH = Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator;
 25         System.out.println("判断SDCard是否存在,是否有可读权限:"
 26         + Environment.MEDIA_MOUNTED.endsWith(Environment.getExternalStorageState()));
 27     }
 28     /**
 29      * 在SD卡上创建文件
 30      * 
 31      * @throws IOException
 32      * 在哪个目录上生成这个文件,文件的名字
 33      */
 34     public File creatSDFile(String fileName,String dir) throws IOException {
 35         File file = new File(SDPATH+dir + fileName);
 36         System.out.println("file--->"+file);
 37         file.createNewFile();
 38         return file;
 39     }
 40     
 41     /**
 42      * 在SD卡上创建目录
 43      * 
 44      * @param dirName
 45      */
 46     public File creatSDDir(String dir) {
 47         File dirFile = new File(SDPATH + dir+File.separator);
 48         System.out.println("creatSDDir?---->"+dirFile.mkdirs());
 49         return dirFile;
 50     }
 51 
 52     /**
 53      * 判断SD卡上的文件夹是否存在
 54      */
 55     public boolean isFileExist(String fileName,String path){
 56         File file = new File(SDPATH + path+File.separator+fileName);
 57         return file.exists();
 58     }
 59     
 60     /**
 61      * 将一个InputStream里面的数据写入到SD卡中
 62      */
 63     public File write2SDFromInput(String path,String fileName,InputStream input){
 64         File file = null;
 65         OutputStream output = null;
 66         try{
 67             creatSDDir(path);
 68             file = creatSDFile( fileName,path );
 69             output = new FileOutputStream(file);
 70             byte buffer [] = new byte[4 * 1024];
 71             int temp;
 72             while((temp=input.read(buffer))!= -1){
 73                 output.write(buffer,0,temp);
 74             }
 75             output.flush();
 76         }
 77         catch(Exception e){
 78             e.printStackTrace();
 79         }
 80         finally{
 81             try{
 82                 output.close();
 83             }
 84             catch(Exception e){
 85                 e.printStackTrace();
 86             }
 87         }
 88         return file;
 89     }
 90     //读取指定文件中mp3的名字和大小
 91     public List<Mp3Info> getMp3Files(String path){
 92         List<Mp3Info> mp3Infos=new ArrayList<Mp3Info>();
 93         //得到File对象
 94         File file=new File(SDPATH+File.separator+path);
 95         //返回当前文件夹中所有的文件,每个文件都是一个File对象,以数组的形式表示
 96         File [] files=file.listFiles();
 97         //for循环将file都取出来
 98         for (int i = 0; i < files.length; i++) {
 99             //首先要判断文件夹里的是mp3文件,即以MP3结尾的文件
100             if(files[i].getName().endsWith("mp3")){
101             //每一个file都对应一个Mp3Info对象
102             Mp3Info mp3Info=new Mp3Info();
103             mp3Info.setMp3Name(files[i].getName());
104             mp3Info.setMp3Size(files[i].length()+"");//length是string而size是字符窜+“”自动变成字符窜
105             mp3Infos.add(mp3Info);//得到Mp3Info
106             }
107             
108         }
109         return mp3Infos;
110         
111     }
112     
113 
114 }

main.xml

 1  <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:id="@android:id/tabhost" android:layout_width="fill_parent"  
 3     android:layout_height="fill_parent">  
 4     <LinearLayout android:orientation="vertical"  
 5         android:layout_width="fill_parent" android:layout_height="fill_parent">  
 6         
 7           <TabWidget android:id="@android:id/tabs"  
 8             android:layout_width="fill_parent" android:layout_height="wrap_content" />  
 9            
10           <FrameLayout android:id="@android:id/tabcontent"  
11            android:layout_width="fill_parent" android:layout_height="fill_parent">  
12        </FrameLayout>  
13     </LinearLayout>  
14 </TabHost>  

注意manifest中主要启动的是MainActivity是有启动顺序的

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.mp3player00"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="4"
 9         android:targetSdkVersion="4" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name="com.example.mp3player00.MainActivity"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <activity android:name="com.example.mp3player00.LocalListActivity"
26                   android:label="@string/app_name" />
27         <activity android:name="com.example.mp3player00.Mp3ListActivity"
28                   android:label="@string/app_name" />
29       <service android:name="service.DownloadService"></service>
30     </application>
31     <uses-permission android:name="android.permission.INTERNET" />
32      <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
33  <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission> 
34 </manifest>

原文地址:https://www.cnblogs.com/kyxyes/p/3373699.html