2011-08-16 17 views
1

私はSDカードから曲を選択したいアプリケーションを作成しました。選択した曲のパスをonActivityResult()に戻して、bla bla bla ...どうすればいいですか?どんな助力もありがたいです。Android; 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(); 
         }      
        } 
       }); 
      } 
     } 
    } 

UPDATE:IなっNULLポインタsetDataSourceでExcepton()私はNPE.Howはそれを解決するようになったY私はその歌はないURI.thatsのコンテンツを取得していますと?

+0

もしあなたが私たちにエラーログを投稿しなければならないのであれば、エラーログを確認してください。)あなたが活動名を宣言しているかどうかを確認してください。私は正しい? – Randroid

+0

setAction(Intent.ACTION_GET_CONTENT)でエラーが発生しました。インテントの代わりに使用する必要があります.PICK – Geetanjali

答えて

1

私は答え

コードだ:私たちは簡単に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;         
     } 
    });  

を。

0

Using Intent.ACTION_PICK for specific pathによれば、ACTION_PICKを使用してディレクトリを指定することはできないようです。しかし、ACTION_PIC &を回避するだけで、ブラウズダイアログを実装するだけで、簡単に目的を達成できます。参照ダイアログの実装に関するヘルプについては、Choose File Dialogをご覧ください。

HTH、

Akshay

+0

いいえ私は別のアクティビティを持っていません – Geetanjali

+0

しかし、後者は – Geetanjali

+0

です。私は質問を誤解して申し訳ありません。私の答えを編集しました。 – Akshay

関連する問題