2012-01-30 3 views
0

우리가 앨범에있는 노래의 목록을 표시 것보다 앨범을 클릭,이 같은 시도하지만 SD 카드MediaPlayer를 : 거기에 앨범 및 디스플레이 노래

`개인 OnItemClickListener musicgridlistener1 = 새로운 OnItemClickListener의 모든 노래를 표시() { public void onItemClick (AdapterView 상위 뷰, int 위치, 긴 ID) { System.gc(); album_column_index1 = musiccursor .getColumnIndexOrThrow (MediaStore.Audio.AlbumColumns.ALBUM_ART); musiccursor.moveToPosition (position); MUSICfilename = musiccursor.getString (album_column_index1);

  Log.i("=======this is file name of album========",""+musiccursor.getCount()+" "+MUSICfilename+" "+position); 

      String[] ablummusicproj = {MediaStore.Audio.Media.DATA, 
        MediaStore.Audio.AlbumColumns.ALBUM, 
        MediaStore.Audio.AlbumColumns.ARTIST, 
        MediaStore.Audio.Media.DISPLAY_NAME}; 
      final String sortOrder = MediaStore.Audio.Media.ALBUM_KEY + " COLLATE LOCALIZED ASC"; 
      //final String sortOrder= MediaStore.Audio.Media.ALBUM_KEY + " ASC, " 
        // + MediaStore.Audio.Media.TRACK + " ASC, " 
        // + MediaStore.Audio.Media.TITLE_KEY + " ASC"; 

      Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      musicAlbum = getBaseContext().getContentResolver().query(uri, ablummusicproj, null, null, sortOrder); 
      count = musicAlbum.getCount(); 
       Log.i("++++++++++ value of album cursor is ",""+count); 
      gridmusic = (GridView) findViewById(R.id.gridmusic); 
      madAdapter_internal = new MusicalbumAdapter_internal(getApplicationContext()); 
      gridmusic.setAdapter(madAdapter_internal); 
      gridmusic.setOnItemClickListener(musicgridlistener); 
      musiccursor=musicAlbum; 
     } 
    }; 

공용 클래스 MusicalbumAdapter_internal는 BaseAdapter { 개인 상황에 맞는 maContext을 확장;

  public MusicalbumAdapter_internal(Context c) { 
       maContext = c; 
       Log.i("++++++++++++++++++", "this is context"); 
      } 

      public int getCount() { 
       return count; 
      } 

      public Object getItem(int position) { 
       return position; 
      } 

      public long getItemId(int position) { 
       return position; 
      } 

      public View getView(int position, View convertView, ViewGroup parent) { 
       System.gc(); 

       TextView tv1 = new TextView(maContext.getApplicationContext()); 
       String id = null; 
       if (convertView == null) { 

         music_column_index = musicAlbum.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.DISPLAY_NAME); 


         musicAlbum.moveToPosition(position); 
        id = musicAlbum.getString(music_column_index); 
        //music_column_index = musiccursor 
          //.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE); 
        musicAlbum.moveToPosition(position); 
        //id += " Size(KB):" + musiccursor.getString(music_column_index); 
        tv1.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        tv1.setText(id); 

       } else 
        tv1 = (TextView) convertView; 
       return tv1; 
      }` 

답변

0

앨범을 가져올 때 album_key를 저장해야합니다.

mediaStoreURI = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      String selection = MediaStore.Audio.Media.ALBUM_KEY + "=?"; 
      String[] projection = new String[] { MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA, 
        MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ALBUM_ID, MediaStore.Audio.Media.ARTIST, 
        "strftime(\"%H-%M-%S\", (" + MediaStore.Audio.Media.DURATION + "/1000), \"unixepoch\") as time" }; 
      String[] selectionArgs = new String[] { ((MediaContainerUSB) currentMediaObject).getUSBGroupingKey() }; 
      String sortOrder = MediaStore.Audio.Media.TRACK; 

album_key는 sdcard의 절대 앨범 용으로 생성되어 다른 테이블에도 저장됩니다.