代码

activity_main.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"tools:context=".MainActivity" ><Buttonandroid:id="@+id/btnScanSD"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_alignRight="@+id/btnReadFromDB"android:text="扫描SD卡中音乐文件" /><ListViewandroid:id="@+id/myList"android:layout_width="match_parent"android:layout_height="300dp"android:layout_alignParentLeft="true"android:layout_alignParentBottom="true"></ListView><Buttonandroid:id="@+id/btnReadFromDB"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/btnScanSD"android:layout_centerHorizontal="true"android:layout_marginTop="32dp"android:text="数据库读取音乐文件" /></RelativeLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView android:id="@+id/txt_music_name"android:layout_width="match_parent"android:layout_height="50dp"android:singleLine="true"android:gravity="center_vertical"android:ellipsize="marquee"/></LinearLayout>

MainActivity.java

package com.progressbartest;import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ClipData.Item;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;public class MainActivity extends Activity {//扫描路径private static String filePath = Environment.getExternalStorageDirectory()+File.separator;//绝对路径private static String nowPath = "";private static String str = "";//扫描文件列表private static List<String> mList = new ArrayList<String>();private SimpleAdapter adapter;private List<Map<String,Object>> items = new ArrayList<Map<String,Object>>();//定义进度对话框标识——扫描SD卡音乐文件final int PROGRESS_DIALOG = 0X112;//定义进度对话框标识——扫描数据库音乐文件final int PROGRESS_DB = 0X111;private ProgressDialog pd;private Handler handler;private ListView myList;//当前所点击按钮标识  0-扫描SD卡 1-读取数据库private int mClickBtn = -1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//扫描SD卡音乐文件Button btnScanSD = (Button)findViewById(R.id.btnScanSD);//读取数据库音乐文件Button btnReadFromDB = (Button)findViewById(R.id.btnReadFromDB);myList = (ListView)findViewById(R.id.myList);btnScanSD.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubshowDialog(PROGRESS_DIALOG);}});btnReadFromDB.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowDialog(PROGRESS_DB);}});handler = new Handler(){public void handleMessage(Message msg){if(msg.arg1 == 1){String ss = nowPath;if(nowPath.length() > 25){ss = "..." + nowPath.substring(nowPath.length() - 22);}pd.setMessage(ss);}else if(msg.arg1 == 2){pd.dismiss();DisplayToast("扫描完毕");if(items.size()>0){items.clear();adapter.notifyDataSetChanged();}for(int i = 0; i < mList.size(); i++){Map<String,Object> item = new HashMap<String,Object>();item.put("musicName", mList.get(i).toString());//sss = mList.get(i).toString();items.add(item);}adapter = new SimpleAdapter(MainActivity.this,items,R.layout.list_item,new String[]{"musicName"},new int[]{R.id.txt_music_name});myList.setAdapter(adapter);//DisplayToast(sss);}}};}@Overridepublic Dialog onCreateDialog(int id, Bundle status){switch(id){case PROGRESS_DIALOG:pd = new ProgressDialog(this);pd.setMax(100);pd.setMessage("正在扫描,请稍后...");pd.setCancelable(false);pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);pd.setIndeterminate(false);break;case PROGRESS_DB:pd = new ProgressDialog(this);pd.setMax(100);pd.setMessage("正在扫描,请稍后...");pd.setCancelable(false);pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);pd.setIndeterminate(false);break;}return pd;}//该方法在onCreateDialog方法调用之后被回调@Overridepublic void onPrepareDialog(int id, Dialog dialog){super.onPrepareDialog(id, dialog);switch(id){case PROGRESS_DIALOG://创建新线程来执行较长时间的任务new Thread(){@Overridepublic void run(){//执行任务getScanFile(filePath);//发送执行完成消息Message message = new Message();//任务完成标志message.arg1 = 2;handler.sendMessage(message);}}.start();break;case PROGRESS_DB:new Thread(){@Overridepublic void run(){//执行任务getFromDB();//发送执行完成消息Message message = new Message();//任务完成标志message.arg1 = 2;handler.sendMessage(message);}}.start();break;}}private void getScanFile(String path){//清空列表//mList.clear();File file = new File(path);//获取该路径下的文件及文件夹File[] files = file.listFiles();//判断该路径下是否存在文件或文件夹if(files != null){//循环判断for(int i = 0; i < files.length; i++){nowPath = files[i].getAbsolutePath();Message msg = new Message();msg.arg1 = 1;handler.sendMessage(msg);//判断是否是文件夹if(files[i].isDirectory()){getScanFile(files[i].getAbsolutePath());}else{//判断文件的扩展名if(files[i].getAbsolutePath().endsWith(".mp3")){//str += files[i].getName() + "\n";mList.add(files[i].getName());}}}}}/** 获取音乐列表*/private void getFromDB(){mList.clear();//清除所有歌曲信息Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.YEAR,MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.DATA}, null, null, null);while(cur.moveToNext()){mList.add(cur.getString(1));}cur.close();}private void DisplayToast(String s){Toast.makeText(this, s, Toast.LENGTH_SHORT).show();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}

源码下载地址: http://download.csdn.net/detail/wangzhongshun/6316687

android ProgressBar实现扫描SD卡文件 + SimpleAdapter绑定ListView相关推荐

  1. android 对象存储sd卡,Android网络与数据存储——File存储(实现SD卡文件浏览器)...

    Java提供了一套完整的IO流体系,包括FileInputStream.FileOutPutStream等,通过这些IO流可以非常方便的访问磁盘上的文件内容.Android同样支持以这种方式来访问手机 ...

  2. android 视频开发sd卡,Android开发之SD卡文件操作分析

    本文实例讲述了Android开发之SD卡文件操作.分享给大家供大家参考,具体如下: 前面的文章中写过直接操作手机自带存储器的程序,这次就接着上次文章协议下对sd卡的文件操作.与自带存储不同的是使用sd ...

  3. sd卡文件莫名其妙消失怎么恢复呢?

    在日常生活中,相机可以帮助我们拍摄一些难忘的照片,记录着我们生活的起起落落.经常存储一些重要的数据,如照片和视频之类的.但有时候存储卡中的照片可能因为不知道的原因而莫名其妙消失了.碰到这样的事,那些s ...

  4. 误删sd卡文件怎么恢复

    误删sd卡文件怎么恢复?在我们日常的数据读写中,SD卡已经成为了一个必不可少的存储介质.不论是在手机.相机.行车记录仪等各种电子设备中都能看到它的踪影.但在使用SD卡中,不可避免地会出现误删文件的情况 ...

  5. 连接手机、PC后,SD卡文件不显示怎么解决?

    文章来源:https://www.reneelab.com.cn/sd-card-files-not-showing.html 目录 一.SD卡上文件不显示的原因 二.如何恢复SD卡中丢失的数据 三. ...

  6. html文件损坏怎么恢复,SD卡文件损坏怎么办?数据恢复教程来了

    SD卡文件损坏怎么办?SD卡是一种性价比相对而言比较高的存储设备,现在常常被应用于手机.相机和行车记录仪等设备中,但在使用过程中也会遇到SD卡损坏的情况,且损坏的原因有很多种,下面就一起来了解下如何修 ...

  7. SD卡文件无法删除怎么办?看完你就明白了

    SD卡文件无法删除怎么办?SD卡常应用于手机.数码相机等设备中,但在使用的过程中也会遇到数据无法删除的情况,这是什么原因造成的呢?下面就给大家分享一下详细的内容. 通常而言,当SD卡的文件数据出现了无 ...

  8. 一键加速索尼相机SD卡文件的复制操作,文件操作批处理教程

    前言 索尼的文件系统很迷,微单是延续DC的文件管理,所以也就造成了DCIM文件夹下就是专门存些照片,视频又在另一个文件夹而普通人的话,又是用不上XML文件的,每次复制都很麻烦,像是之前我用佳能全画幅时 ...

  9. 3-SII--Android的SD卡文件读写

    零.前言 [1]读写SD卡需要运行时权限. [2]如果对运行时权限不清楚的童鞋,可以看一下我的封装:TI--安卓运行时权限完美封装 一.使用:SD卡文件读写 FileHelper fileHelper ...

最新文章

  1. PHP协程:并发 shell_exec
  2. 数字三角形,最长上升子序列,背包模型 AcWing算法提高课 (详解)
  3. 在阿里云的Ubuntu ECS instance 使用Apt-get安装git
  4. ejb 2.0 3.0_EJB 3.0注入和查找简介
  5. [OpenCV学习]1、环境搭建
  6. 符号库匹配不对的原因_整理了几种离合器打滑的原因,再安装调试时可别弄错了...
  7. 学习python的日常7
  8. 一个操作系统的实现01
  9. 多重背包(二进制优化)
  10. oracle 下载 地址,oracle11g下载地址
  11. 考研数据结构之栈(2.5)——练习题之求解二次方根A的迭代函数,写出相应的递归算法和非递归算法(C表示)
  12. 计算机3c,计算机3C认证办理介绍
  13. android 的一些编译问题
  14. keyboard ios 虚拟键盘 删除键的响应
  15. windows和android双系统平板,平板电脑双系统和安卓单系统,哪个好用?
  16. 蛋白粉是智商税?这6类人喝了,一点都不亏
  17. 基础项目(10)BCD转二进制程序设计讲解
  18. checkbox选中和不选中 jqu_JQuery控制radio选中和不选中方法总结
  19. 【递推】任何一个自然数的立方都可以写成一串连续奇数之和问题 C
  20. Riak - 背景篇(1)

热门文章

  1. java string逆序_java经典入门算法题,java初学者必备
  2. 【转】CT图像重构方法详解——傅里叶逆变换法、直接反投影法、滤波反投影法
  3. 【转】PF_INET 和 AF_INET 的区别
  4. 【转】05.Dicom 学习笔记-DICOM C-Echo 消息服务
  5. 【转】C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
  6. 【转】C#中[STAThread]的作用
  7. 什么是指利用计算机和现代,现代计算机一般指什么计算机?
  8. docker多个容器一起打包_如何链接多个Docker容器并封装结果?
  9. SpringCloud:学习Docker安装zookeeper,注册服务
  10. ArrayList和LinkedList 的区别