关于内置内存卡与外置内存卡的路径获取

从论坛中寻找到的一种方法,具体可以参见论坛地址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);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值