Browse Button required?

前端 未结 3 566
心在旅途
心在旅途 2020-12-14 12:16

Hii i am working on an application in which i require to select files using browse button.. How can i implement a browse button in android?

3条回答
  •  一向
    一向 (楼主)
    2020-12-14 12:33

    Below is whole code from my sample application. I used a button which will pick files from any directory of your phone.


    layouts

    file_picker_empty_view.xml

    
    

    file_picker_list_item.xml

    
      
      
    
    

    file_view.xml

    
    
        
        
    
    

    main.xml

    
        

    Activities are

    FilePickerActivity

    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    import android.app.ListActivity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;
    
    /**
     * 
     * @author pankaj
     *
     */
    public class FilePickerActivity extends ListActivity {
    
        public final static String EXTRA_FILE_PATH = "file_path";
        public final static String EXTRA_SHOW_HIDDEN_FILES = "show_hidden_files";
        public final static String EXTRA_ACCEPTED_FILE_EXTENSIONS = "accepted_file_extensions";
        private final static String DEFAULT_INITIAL_DIRECTORY = "/";
    
        protected File mDirectory;
        protected ArrayList mFiles;
        protected FilePickerListAdapter mAdapter;
        protected boolean mShowHiddenFiles = false;
        protected String[] acceptedFileExtensions;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Set the view to be shown if the list is empty
            LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View emptyView = inflator.inflate(R.layout.file_picker_empty_view, null);
            ((ViewGroup)getListView().getParent()).addView(emptyView);
            getListView().setEmptyView(emptyView);
    
            // Set initial directory
            mDirectory = new File(DEFAULT_INITIAL_DIRECTORY);
    
            // Initialize the ArrayList
            mFiles = new ArrayList();
    
            // Set the ListAdapter
            mAdapter = new FilePickerListAdapter(this, mFiles);
            setListAdapter(mAdapter);
    
            // Initialize the extensions array to allow any file extensions
            acceptedFileExtensions = new String[] {};
    
            // Get intent extras
            if(getIntent().hasExtra(EXTRA_FILE_PATH)) {
                mDirectory = new File(getIntent().getStringExtra(EXTRA_FILE_PATH));
            }
            if(getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES)) {
                mShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false);
            }
            if(getIntent().hasExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS)) {
                ArrayList collection = getIntent().getStringArrayListExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS);
                acceptedFileExtensions = (String[]) collection.toArray(new String[collection.size()]);
            }
        }
    
        @Override
        protected void onResume() {
            refreshFilesList();
            super.onResume();
        }
    
        /**
         * Updates the list view to the current directory
         */
        protected void refreshFilesList() {
            // Clear the files ArrayList
            mFiles.clear();
    
            // Set the extension file filter
            ExtensionFilenameFilter filter = new ExtensionFilenameFilter(acceptedFileExtensions);
    
            // Get the files in the directory
            File[] files = mDirectory.listFiles(filter);
            if(files != null && files.length > 0) {
                for(File f : files) {
                    if(f.isHidden() && !mShowHiddenFiles) {
                        // Don't add the file
                        continue;
                    }
    
                    // Add the file the ArrayAdapter
                    mFiles.add(f);
                }
    
                Collections.sort(mFiles, new FileComparator());
            }
            mAdapter.notifyDataSetChanged();
        }
    
        @Override
        public void onBackPressed() {
            if(mDirectory.getParentFile() != null) {
                // Go to parent directory
                mDirectory = mDirectory.getParentFile();
                refreshFilesList();
                return;
            }
    
            super.onBackPressed();
        }
    
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            File newFile = (File)l.getItemAtPosition(position);
    
            if(newFile.isFile()) {
                // Set result
                Intent extra = new Intent();
                extra.putExtra(EXTRA_FILE_PATH, newFile.getAbsolutePath());
                setResult(RESULT_OK, extra);
                // Finish the activity
                finish();
            } else {
                mDirectory = newFile;
                // Update the files list
                refreshFilesList();
            }
    
            super.onListItemClick(l, v, position, id);
        }
    
        private class FilePickerListAdapter extends ArrayAdapter {
    
            private List mObjects;
    
            public FilePickerListAdapter(Context context, List objects) {
                super(context, R.layout.file_picker_list_item, android.R.id.text1, objects);
                mObjects = objects;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
    
                View row = null;
    
                if(convertView == null) { 
                    LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    row = inflater.inflate(R.layout.file_picker_list_item, parent, false);
                } else {
                    row = convertView;
                }
    
                File object = mObjects.get(position);
    
                ImageView imageView = (ImageView)row.findViewById(R.id.file_picker_image);
                TextView textView = (TextView)row.findViewById(R.id.file_picker_text);
                // Set single line
                textView.setSingleLine(true);
    
                textView.setText(object.getName());
                if(object.isFile()) {
                    // Show the file icon
                    imageView.setImageResource(R.drawable.file);
                } else {
                    // Show the folder icon
                    imageView.setImageResource(R.drawable.folder);
                }
    
                return row;
            }
    
        }
    
        private class FileComparator implements Comparator {
            public int compare(File f1, File f2) {
                if(f1 == f2) {
                    return 0;
                }
                if(f1.isDirectory() && f2.isFile()) {
                    // Show directories above files
                    return -1;
                }
                if(f1.isFile() && f2.isDirectory()) {
                    // Show files below directories
                    return 1;
                }
                // Sort the directories alphabetically
                return f1.getName().compareToIgnoreCase(f2.getName());
            }
        }
    
        private class ExtensionFilenameFilter implements FilenameFilter {
            private String[] mExtensions;
    
            public ExtensionFilenameFilter(String[] extensions) {
                super();
                mExtensions = extensions;
            }
    
            public boolean accept(File dir, String filename) {
                if(new File(dir, filename).isDirectory()) {
                    // Accept all directory names
                    return true;
                }
                if(mExtensions != null && mExtensions.length > 0) {
                    for(int i = 0; i < mExtensions.length; i++) {
                        if(filename.endsWith(mExtensions[i])) {
                            // The filename ends with the extension
                            return true;
                        }
                    }
                    // The filename did not match any of the extensions
                    return false;
                }
                // No extensions has been set. Accept all file extensions.
                return true;
            }
        }
    }
    

    MainActivity // This must be your default Activity, as MAIN in manifest

    public class MainActivity extends Activity implements OnClickListener {
    
        private static final int REQUEST_PICK_FILE = 1;
    
        private TextView mFilePathTextView;
        private Button mStartActivityButton;
        private File selectedFile;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // Set the views
            mFilePathTextView = (TextView)findViewById(R.id.file_path_text_view);
            mStartActivityButton = (Button)findViewById(R.id.start_file_picker_button);
            mStartActivityButton.setOnClickListener(this);      
        }
    
        public void onClick(View v) {
            switch(v.getId()) {
            case R.id.start_file_picker_button:
                // Create a new Intent for the file picker activity
                Intent intent = new Intent(this, FilePickerActivity.class);
    
                // Set the initial directory to be the sdcard
                //intent.putExtra(FilePickerActivity.EXTRA_FILE_PATH, Environment.getExternalStorageDirectory());
    
                // Show hidden files
                //intent.putExtra(FilePickerActivity.EXTRA_SHOW_HIDDEN_FILES, true);
    
                // Only make .png files visible
                //ArrayList extensions = new ArrayList();
                //extensions.add(".png");
                //intent.putExtra(FilePickerActivity.EXTRA_ACCEPTED_FILE_EXTENSIONS, extensions);
    
                // Start the activity
                startActivityForResult(intent, REQUEST_PICK_FILE);
                break;
    
            case R.id.You_can_handle_more_onclick_events_from_here:
                //Do something
                break;
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(resultCode == RESULT_OK) {
                switch(requestCode) {
                case REQUEST_PICK_FILE:
                    if(data.hasExtra(FilePickerActivity.EXTRA_FILE_PATH)) {
                        // Get the file path
                        selectedFile = new File(data.getStringExtra(FilePickerActivity.EXTRA_FILE_PATH));
                        // Set the file path text view
                        mFilePathTextView.setText(selectedFile.getPath());  
                        //Now you have your selected file, You can do your additional requirement with file.                
                    }
                }
            }
        }
    }
    

    Now Iam uploading images, You can use your own images.

    Image Name: file

    enter image description here

    Image Name: folder

    enter image description here

    and finally

    AndroidManifest.xml

    
    
          
          
        
            
            
            
                
                    
                    
                
            
        
        
    
     
    

    These are links for more information: Android file picker Activity and Creating simple file chooser.

提交回复
热议问题