2011-04-11 15 views
10

हाय मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जिसमें मुझे ब्राउज़ बटन का उपयोग करके फ़ाइलों का चयन करने की आवश्यकता है .. मैं एंड्रॉइड में ब्राउज़ बटन कैसे कार्यान्वित कर सकता हूं?बटन ब्राउज़ करना आवश्यक है?

उत्तर

26

ओह मुझे डाउनवोट मिला ..... ठीक है, मैं अपना जवाब अपडेट कर रहा हूं। मैं नमूना आवेदन के लिए कोड डाल रहा हूं जिसमें मैंने एक बटन इस्तेमाल किया जो आपके फोन की किसी भी निर्देशिका से फाइलें लेगा।

लेआउट

file_picker_empty_view.xml

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:text="No files or directories" 
android:background="@android:drawable/toast_frame" 
android:textSize="28sp" 
android:gravity="center_vertical|center_horizontal"/> 

file_picker_list_item.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 
    <ImageView 
     android:id="@+id/file_picker_image" 
     android:layout_width="40dip" 
     android:layout_height="40dip" 
     android:layout_marginTop="5dip" 
     android:layout_marginBottom="5dip" 
     android:layout_marginLeft="5dip" 
     android:src="@drawable/file" 
     android:scaleType="centerCrop"/> 
    <TextView 
     android:id="@+id/file_picker_text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="left|center_vertical" 
     android:textSize="28sp" 
     android:layout_marginLeft="10dip" 
     android:singleLine="true" 
     android:text="filename"/> 
</LinearLayout> 

file_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_width="fill_parent"> 
    <TextView android:text="@+id/TextView01" 
    android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:textStyle="bold" 
    android:layout_marginTop="5dip" 
    android:layout_marginLeft="5dip"></TextView> 
    <TextView android:text="@+id/TextView02" 
    android:id="@+id/TextView02" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="10dip"></TextView> 
</LinearLayout> 

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center_vertical"> 
    <Button android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/start_file_picker_button" 
     android:text="Browse" /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Selected file" 
     android:textStyle="bold" 
     android:textColor="#fff" 
     android:textSize="24sp" /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/file_path_text_view" 
     android:text="No file has been selected" 
     android:textSize="18sp" /> 
</LinearLayout> 

क्रियाएँ

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<File> 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<File>(); 

     // 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<String> 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<File> { 

     private List<File> mObjects; 

     public FilePickerListAdapter(Context context, List<File> 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<File> { 
     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 // यह प्रकट

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<String> extensions = new ArrayList<String>(); 
      //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.     
       } 
      } 
     } 
    } 
} 

अब में मुख्य रूप में अपने डिफ़ॉल्ट गतिविधि, होना चाहिए मैं छवियों को अपलोड कर रहा हूँ, आप ca n अपनी खुद की छवियों का उपयोग करें।

छवि का नाम: फाइल

enter image description here

छवि का नाम: फ़ोल्डर

enter image description here

और अंत में

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="org.myContactAdder.adder" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <uses-permission android:name="android.permission.READ_CONTACTS" /> 
     <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".FilePickerActivity" 
        android:label="@string/app_name"> 
     </activity> 
     <activity android:name=".MainActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <uses-sdk android:minSdkVersion="7" /> 

</manifest> 

ये अधिक जानकारी के लिए लिंक हैं: Android file picker Activity और Creating simple file chooser

+0

-1 क्योंकि पोस्टिंग लिंक एक अच्छा जवाब नहीं है। कृपया आपके द्वारा पोस्ट किए गए लिंक के बारे में कुछ विवरण प्रदान करें ताकि प्रत्येक व्यक्ति इसका विचार कर सके कि वह उनका अनुसरण करते समय क्या पा सकता है। – WarrenFaith

+0

@WarrenFaith मैंने अपना जवाब अपडेट किया और यदि उत्तर देने का यह अच्छा तरीका है, तो क्या आप अपना डाउन वोट रद्द कर सकते हैं? और कभी-कभी जब आप व्यस्त होते हैं तो आप कुछ कोड पोस्ट नहीं कर सकते हैं, इसलिए आमतौर पर मैं लिंक साझा करता हूं, अगर किसी भी प्रश्न का उत्तर देने का कोई अच्छा तरीका नहीं है, तो मैं इसका ख्याल रखूंगा। –

+0

यह अब एक बहुत अच्छा जवाब है, मैंने इसे अभी उठाया है। यदि आप एक अच्छा जवाब बनाने के लिए व्यस्त हैं, तो आप कुछ लिंक को टिप्पणी के रूप में डालने पर विचार कर सकते हैं या इसे पूरी तरह से छोड़ सकते हैं (मैंने बस नीचे दिए गए लिंक लिंक संपादित किए हैं। 1 और 2 लिंकनाम के लिए एक अच्छा विकल्प नहीं हैं .. ।) – WarrenFaith

3

आप क्या करने की जरूरत:

  1. एक बटन जो एक अलग गतिविधि (startActivityForResult) चलाता है बनाएँ।

  2. यह फ़ाइल चुनने की गतिविधि किसी विशेष स्थान से सभी फ़ाइलों और फ़ोल्डरों को सूचीबद्ध करनी चाहिए। यदि आप किसी फ़ोल्डर पर क्लिक करते हैं, तो इस फ़ोल्डर के लिए गतिविधि को पुन: प्रारंभ किया जाता है (इससे फ़ाइलें सूचीबद्ध करें)।

  3. यदि कोई फ़ाइल क्लिक की गई है, तो गतिविधि को परिणाम सेट करना चाहिए, अतिरिक्त में फ़ाइल नाम पास करना होगा, और समाप्त करना होगा।

    http://www.kaloer.com/android-file-picker-activity

    यह एक अपाचे लाइसेंस दिया गया है:

1

यहाँ कुछ कोड आप एक फ़ाइल पिकर करने के लिए उपयोग कर सकते हैं।

+4

लिंक नीचे है –

संबंधित मुद्दे