从论坛中寻找到的一种方法,具体可以参见论坛地址http://bbs.csdn.net/topics/390667153,源码如下
public class MainActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] str3=Environment.getExternalStorageDirectory().list();//这个貌似在多SD卡的情况下获取的是
for(int i=0;i<str3.length;i++){//外置的内存卡
Log.d("tagsome",str3[i]);
}
List<File> files=new ArrayList<File>();
StorageManager sm = (StorageManager) this.getSystemService(Context.STORAGE_SERVICE);
try
{
String[] paths = (String[]) sm.getClass().getMethod("getVolumePaths", null).invoke(sm,null);
for(int i = 0; i < paths.length; i++)
{
String status = (String) sm.getClass().getMethod("getVolumeState", String.class).invoke(sm, paths[i]);
if(status.equals(android.os.Environment.MEDIA_MOUNTED)) {
files.add(new File(paths[i]));
}
}
}catch (Exception e){
e.printStackTrace();
}
for(int i=0;i<files.size();i++){
Log.d("tagsome","start"+i);
String[] strings=files.get(i).list();
for(int j=0;j<strings.length;j++)
Log.d("tagsome",strings[j]);
}
}
public void sendbroaddcast(View source){
Intent intent=new Intent("ch.mybroadcast1");
sendBroadcast(intent);
}
}
另外这篇博客也有讲SD卡的路径获取,地址为http://blog.csdn.net/chadeltu/article/details/43736093
下面另附上一个我根据这个做的一个文件浏览器,我在我的手机上测试了能用
首先是关于获取根目录的类的代码,这个跟上面是一模一样的
public class SDPath {
public static List<String> getRootPath(){
List<String> files=new ArrayList<String>();
StorageManager sm = (StorageManager) MyContext.getContext().getSystemService(Context.STORAGE_SERVICE);
try
{
String[] paths = (String[]) sm.getClass().getMethod("getVolumePaths", null).invoke(sm,null);
for(int i = 0; i < paths.length; i++)
{
String status = (String) sm.getClass().getMethod("getVolumeState", String.class).invoke(sm, paths[i]);
if(status.equals(android.os.Environment.MEDIA_MOUNTED)) {
files.add(paths[i]);
}
}
}catch (Exception e){
e.printStackTrace();
}
return files;
}
}
下面是主题的实现类
public class MainActivity extends ListActivity {
Stack<ArrayAdapter<String>> filestack=new Stack<ArrayAdapter<String>>();
List<String> files;
ArrayAdapter<String> adapter;
StringBuilder builder=new StringBuilder();
ActionBar actionBar;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
files=SDPath.getRootPath();
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,files);
this.setListAdapter(adapter);
actionBar=getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
String itemtext=adapter.getItem(position);
File itemfile=new File(builder+itemtext);
if(!itemfile.isDirectory())
return;
String[] filslist=itemfile.list();
if(filslist==null){
Toast.makeText(this,"is null",Toast.LENGTH_SHORT).show();
return;
}
builder.append(itemtext).append("/");
filestack.push(adapter);
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,filslist);
this.setListAdapter(adapter);
}
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home){
if(filestack.isEmpty())
return true;
adapter=filestack.pop();
this.setListAdapter(adapter);
int pos=builder.deleteCharAt(builder.length()-1).lastIndexOf("/");
boolean flag=filestack.isEmpty();
if(flag)
builder.delete(0,builder.length());
else
builder.delete(pos+1,builder.length());
return true;
}
return onOptionsItemSelected(item);
}
}