<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/edit"
android:hint="请输入查找的文件名"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/serch"
android:text="开始搜索SD卡"
/>
</LinearLayout>
package com.ouling.ex_SDAsyncTask;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Ex_SDAsyncTaskActivity extends Activity {
final String TAG="ASYNCTASK";
List<String> filelist; // 搜索到的文件
EditText editText;
Button btn_search;
Context context;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
editText = (EditText) findViewById(R.id.edit);
btn_search = (Button) findViewById(R.id.serch);
filelist = new ArrayList<String>();
btn_search.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(TAG, "onclik start Thread id "+Thread.currentThread().getId());
// 搜索文件的异步任务
new AsyncTask<Integer, Integer, String>() {
private ProgressDialog dialog;
// UI显示
protected void onPreExecute() {
Log.i(TAG, "onPreExecute Thread id "+Thread.currentThread().getId());
dialog = ProgressDialog.show(
Ex_SDAsyncTaskActivity.this, "",
"正在扫描SD卡,请稍候....");
super.onPreExecute();
}
// 后台执行
protected String doInBackground(Integer... params) {
Log.i(TAG, "doInBackground Thread id "+Thread.currentThread().getId());
if (!android.os.Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED)) {
} else {
if (!editText.getText().toString().equals("")) {
filelist.clear();
return Search_Files(Environment
.getExternalStorageDirectory());
}
}
return null;
}
// 搜索完毕后,结果处理
protected void onPostExecute(String result) {
Log.i(TAG, "onPostExecute Thread id "+Thread.currentThread().getId());
dialog.dismiss();
if (editText.getText().toString().equals("")) {
Toast.makeText(Ex_SDAsyncTaskActivity.this,
"请输入搜索的文件名", 1000).show();
} else {
new AlertDialog.Builder(Ex_SDAsyncTaskActivity.this)
.setTitle("SD卡搜索结果")
.setMessage(result)
.create().show();
}
super.onPostExecute(result);
}
}.execute(0);
Log.i(TAG, "onClick stop Thread id "+Thread.currentThread().getId());
};
});
}
/**
* 获取文件列表
*
* @param filePath
*/
public String Search_Files(File filePath) {
File[] files = filePath.listFiles();
String tempString=editText.getText().toString().toLowerCase();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
Search_Files(files[i]);
} else {
//匹配文件名
if(files[i].getName().toLowerCase().contains(tempString)){
filelist.add(files[i].getAbsolutePath()+"\n");
}
}
}
}
return filelist.toString();
}
}