2011-08-16 2 views
1

SD 카드에서 노래를 선택하려는 응용 프로그램을 만들었으므로 선택한 노래의 경로를 onActivityResult()로 돌려 보내야 bla를 할 수 있습니다 bla bla .. 어떻게 구할 수 있니? 어떤 도움을 주시면 감사하겠습니다. 나에게 정말로 중요합니다.안드로이드, SD 카드 및 반송 경로에서 픽업 노래의 문제점

코드 :

@Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     menu.add("Pick Song"); 
     return super.onCreateOptionsMenu(menu); 
    } 

    protected File getTempFile() 
    { 
     dir =new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Music"); 
     return dir; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     super.onOptionsItemSelected(item); 
     //System.gc(); 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     intent.setType("audio/mp3"); 
     Uri data = Uri.fromFile(getTempFile()); 
     intent.setData(data); 
     startActivityForResult(intent, Pick_song); 
     return true; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch(requestCode) 
     { 
      case Pick_song : if ((resultCode == RESULT_OK)&&(data != null)) 
      { 
       final String ringTonePath = data.getData().getEncodedPath(); 
       Button playbutton = (Button)findViewById(R.id.play); 
       playbutton.setVisibility(0); 
       playbutton.setOnClickListener(new View.OnClickListener() 
       { 
        @Override 
        public void onClick(View view) 
        { 
         try 
         { 
          mMediaPlayer.setDataSource(ringTonePath); 
          mMediaPlayer.start(); 
          mMediaPlayer.setOnCompletionListener(new OnCompletionListener() 
          { 
           @Override 
           public void onCompletion(MediaPlayer mp) 
           { 
            mp.release(); 
            mp = null;         
           } 
          });        
         } 
         catch (Exception exception) 
         { 
          exception.printStackTrace(); 
         }      
        } 
       }); 
      } 
     } 
    } 

업데이트 :. 내가 그 노래에 대한 내용을 얻고으로 내가 NPE.How을 가지고 y를 setDataSource (에 점점 널 포인터 Excepton)이 아닌 URI.thats 그렇게 내가 해결하려면?

+0

만약 우리가 오류 U를 알고 싶다면 logcat 세부 사항을 게시해야합니다 :), 더 나은지 확인하십시오 manifest에서 u는 활동 이름을 선언했는지 아닌지 (다른 활동이 있다면) 맞지? – Randroid

+0

setAction에서 오류가 발생했습니다 (Intent.ACTION_GET_CONTENT); 대신 Intent.PICK 대신 사용해야합니다. – Geetanjali

답변

0

Using Intent.ACTION_PICK for specific path에 따르면 ACTION_PICK을 사용하여 디렉토리를 지정할 수없는 것으로 보입니다. 그러나 ACTION_PIC &을 우회하면 탐색 대화 상자를 구현하기 만하면 원하는 것을 쉽게 수행 할 수 있습니다. 찾아보기 대화 상자를 구현하는 데 도움이 필요하면 Choose File Dialog을보십시오. 우리가 쉽게 URI를 파일로 콘텐츠 URI로 변환 할 수 있습니다 이로써

System.gc(); 
    mMediaPlayer = new MediaPlayer(); 
    if(mMediaPlayer.isPlaying()) 
    { 
     mMediaPlayer.reset(); 
    } 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    musiccursor = managedQuery(mUri, proj, null, null, null); 
    music_column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
    musiccursor.moveToFirst(); 
    String filename = musiccursor.getString(music_column_index); 
    mMediaPlayer.setDataSource(filename); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.start(); 
    mMediaPlayer.setOnCompletionListener(new OnCompletionListener() 
    { 
      @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       mp.release(); 
       mp = null;         
     } 
    });  

:

HTH,

하기 Akshay

+0

아니 다른 활동이없는 – Geetanjali

+0

하지만 경우 후자 – Geetanjali

+0

나는 미안 해요 질문을 오해. 내 대답을 편집했습니다. – Akshay

관련 문제