Android 파일 선택 기 상세 설명 및 인 스 턴 스 코드

본 고 는 안 드 로 이 드 파일 선택 기의 사용 에 대해 설명 한다.실제로 사용자 가 SD 카드 에서 선택 한 파일 이나 폴 더 의 경 로 를 가 져 오 는 것 입 니 다.이것 은 C\#의 OpenFileDialog 컨트롤 과 같 습 니 다.
       이 인 스 턴 스 의 실현 과정 은 매우 간단 합 니 다.이렇게 하면 안 드 로 이 드 파일 선택 기 를 신속하게 숙지 하고 개발 효율 을 높 일 수 있 습 니 다.
       인터넷 에서 파일 선택 기 에 관 한 인 스 턴 스 를 본 적 이 있 습 니 다.많은 사람들 이 본 인 스 턴 스 는 수정 에 따라 이 루어 진 것 이지 만 이해 하기 쉽 고 효율 도 높 습 니 다.또한 본 인 스 턴 스 는 자신의 특징 이 있 습 니 다.
       1.사용자 가 Back 키 를 누 른 이 벤트 를 감청 하여 이전 디 렉 터 리 로 되 돌려 줍 니 다.
       2.서로 다른 파일 형식(파일 vs 폴 더,대상 파일 vs 다른 파일)에 대해 특수 처 리 를 했 습 니 다.
       지식 포인트 1.File 류 의 사용
       파일 선택 기의 주요 기능 은 파일\폴 더,파일 형식 등 을 탐색 하 는 것 입 니 다.모두 자바 File 클래스 를 통 해 이 루어 집 니 다.
       지식 점 2.호출 방법 설명  
       startActivity ForResult()호출 및 onActivity Result()방법 으로 리 셋 된 정 보 를 받 았 습 니 다.
       먼저 효과 도 를 다음 과 같이 붙 입 니 다.

       다른 것 도 할 말 이 없 으 니 코드 주석 을 보 세 요.아주 간단 합 니 다.
       FileChooser Activity.java 에서 파일 선택 을 실현 하 는 클래스 입 니 다.
자바 코드

public class CopyOfFileChooserActivity extends Activity { 
   
  private String mSdcardRootPath ; //sdcard     
  private String mLastFilePath ;  //        
   
  private ArrayList<FileInfo> mFileLists ; 
  private FileChooserAdapter mAdatper ; 
   
  //      
  private void setGridViewAdapter(String filePath) { 
    updateFileItems(filePath); 
    mAdatper = new FileChooserAdapter(this , mFileLists); 
    mGridView.setAdapter(mAdatper); 
  } 
  //        ,    Adatper     
  private void updateFileItems(String filePath) { 
    mLastFilePath = filePath ; 
    mTvPath.setText(mLastFilePath); 
     
    if(mFileLists == null) 
      mFileLists = new ArrayList<FileInfo>() ; 
    if(!mFileLists.isEmpty()) 
      mFileLists.clear() ; 
     
    File[] files = folderScan(filePath); 
    if(files == null)  
      return ; 
    for (int i = 0; i < files.length; i++) { 
      if(files[i].isHidden()) //         
        continue ; 
       
      String fileAbsolutePath = files[i].getAbsolutePath() ; 
      String fileName = files[i].getName(); 
      boolean isDirectory = false ; 
      if (files[i].isDirectory()){ 
        isDirectory = true ; 
      } 
      FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ; 
      //      
      mFileLists.add(fileInfo); 
    } 
    //When first enter , the object of mAdatper don't initialized 
    if(mAdatper != null) 
      mAdatper.notifyDataSetChanged(); //     
  } 
  //            
  private File[] folderScan(String path) { 
    File file = new File(path); 
    File[] files = file.listFiles(); 
    return files; 
  } 
  private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, 
        long id) { 
      FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position)); 
      if(fileInfo.isDirectory())  //       ,             
        updateFileItems(fileInfo.getFilePath()) ; 
      else if(fileInfo.isPPTFile()){ // ppt   ,             
        Intent intent = new Intent(); 
        intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath()); 
        setResult(RESULT_OK , intent); 
        finish(); 
      } 
      else {  //    ..... 
        toast(getText(R.string.open_file_error_format)); 
      } 
    } 
  }; 
  public boolean onKeyDown(int keyCode , KeyEvent event){ 
    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() 
      == KeyEvent.KEYCODE_BACK){ 
      backProcess();   
      return true ; 
    } 
    return super.onKeyDown(keyCode, event); 
  } 
  //           
  public void backProcess(){ 
    //         sdcard   ,     ,       。 
    if (!mLastFilePath.equals(mSdcardRootPath)) {  
      File thisFile = new File(mLastFilePath); 
      String parentFilePath = thisFile.getParent(); 
      updateFileItems(parentFilePath); 
    }  
    else {  // sdcard   ,     
      setResult(RESULT_CANCELED); 
      finish(); 
    } 
  } 
} 
       이 실례 의 인 터 페 이 스 는 약간 누추 해 보이 지만 여러분 은 이 를 바탕 으로 보완 하고 다른 기능 을 추가 할 수 있 습 니 다.이 인 스 턴 스 코드 다운로드 주소:
http://download.csdn.net/detail/qinjuning/4825392。
        읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기