• 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>

  • 相关阅读:
    《那些年啊,那些事——一个程序员的奋斗史》——40
    《那些年啊,那些事——一个程序员的奋斗史》——41
    《那些年啊,那些事——一个程序员的奋斗史》——42
    《那些年啊,那些事——一个程序员的奋斗史》——40
    《那些年啊,那些事——一个程序员的奋斗史》——41
    《那些年啊,那些事——一个程序员的奋斗史》——42
    《那些年啊,那些事——一个程序员的奋斗史》——40
    箭牌卫浴(帮朋友发的广告贴)
    Playing with ptrace
    [open source]通过汉字得到拼音的函数库(getpinyin)发布
  • 原文地址:https://www.cnblogs.com/kyxyes/p/3373699.html
Copyright © 2020-2023  润新知