6

アルバム名のアルバムアートをリストビューに表示したい。しかし、私はアルバムアートを表示する方法を得ていません。私はcover art on androidから試しました。アルバムを入手アート名アルバム名Android

は、ここに私のコードです:

Cursor cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, null, null, null); 
      if (cursor == null) 
      { 
       //Query Failed , Handle error. 
      } 
      else if (!cursor.moveToFirst()) 
      { 
      //No media on the device. 
      } 
      else 
      { 
       int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM_ART); 
       int id = cursor.getColumnIndex(android.provider.MediaStore.Audio.Albums.ALBUM_ID); //here value i m getting -1 . 

       for(int i=0;i<cursor.getCount();i++) 
       { 
        if(id<0) 
        { 
         Long album =Long.parseLong(cursor.getString(id)); 
         String coverPath = cursor.getString(titleColumn); 

         Context context = null; 
         ContentResolver res = context.getContentResolver(); 
         Uri uri = ContentUris.withAppendedId(sArtworkUri, album); 
         if (uri != null) 
         { 
          InputStream in = null; 
          try 
          { 
           in = res.openInputStream(uri); 
           Bitmap b = BitmapFactory.decodeStream(in, null, sBitmapOptions); 
           ImageView coverAlbum=(ImageView)findViewById(R.id.thumbnail); 
           coverAlbum.setImageBitmap(b); 

          } catch (FileNotFoundException ex) 
          { 

          } 

         } 

        } 
         //code to insert in listview 
        cursor.moveToNext(); 
       } 
      } 
      cursor.close(); 
} 

しかし、私はalbum_idを取得しています-1。だから私はアルバムのalbum_idを取得していないが、私は私のSDカードにアルバムの歌を持っている。そして、sdcardはalbumthumsのようなフォルダをいくつかのファイルが含まれています。ですから、アルバムの名前と芸術を得るための解決策を教えてください。 Thanx in Advance。


これは私のエラーログです:

12-03 15:19:22.051: WARN/System.err(32334): java.lang.NullPointerException 
12-03 15:19:22.060: WARN/System.err(32334):  at com.mnp.AlbumList.onCreate(AlbumList.java:59) 
12-03 15:19:22.120: WARN/System.err(32334):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-03 15:19:22.130: WARN/System.err(32334):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
12-03 15:19:22.140: WARN/System.err(32334):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
12-03 15:19:22.161: WARN/System.err(32334):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
12-03 15:19:22.171: WARN/System.err(32334):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
12-03 15:19:22.180: WARN/System.err(32334):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-03 15:19:22.201: WARN/System.err(32334):  at android.os.Looper.loop(Looper.java:123) 
12-03 15:19:22.210: WARN/System.err(32334):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
12-03 15:19:22.220: WARN/System.err(32334):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-03 15:19:22.240: WARN/System.err(32334):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-03 15:19:22.250: WARN/System.err(32334):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
12-03 15:19:22.260: WARN/System.err(32334):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
12-03 15:19:22.270: WARN/System.err(32334):  at dalvik.system.NativeStart.main(Native Method) 
+0

あなたはまだ同じプロジェクトで作業していますか? –

+0

@Ankitいいえ私はこのプロジェクトに取り組んでいませんが、疑問があれば私に尋ねてください。可能であれば、私はそれを解決しようとします。 – zanky

+0

よく私はあなたがまだ私のコードを共有することができる......働いていたと思った疑いがなかった...... :) 途中でmediametadataretrieverを使ったことがありますか?カスタムリストビューをソートしようとしましたか? –

答えて

21

曲の情報とアルバムアートを取得するためにコードの下に使用します。曲リストの代わりにアルバム名のみを表示するように少し変更することができます。

public class BrowseAudioActivity extends Activity implements 
      AppConstants { 
     private Context context; 
     private ArrayList<AudioListModel> audioArrayList = new ArrayList<AudioListModel>(); 
     private AudioListAdapter audioListAdapter; 
     private ListView audioListView; 



/** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      setContentView(R.layout.audio_list); 
      UtilityClass.addActivityToStack(this); 
      context = this; 
      audioListView = (ListView) findViewById(R.id.list_audio); 

      new GetAudioListAsynkTask(context).execute((Void) null); 



     } 

     private void initLayout() { 
      final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
      final String[] cursor_cols = { MediaStore.Audio.Media._ID, 
        MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, 
        MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA, 
        MediaStore.Audio.Media.ALBUM_ID, 
        MediaStore.Audio.Media.DURATION }; 
      final String where = MediaStore.Audio.Media.IS_MUSIC + "=1"; 
      final Cursor cursor = context.getContentResolver().query(uri, 
        cursor_cols, where, null, null); 

      while (cursor.moveToNext()) { 
       String artist = cursor.getString(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); 
       String album = cursor.getString(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); 
       String track = cursor.getString(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); 
       String data = cursor.getString(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)); 
       Long albumId = cursor.getLong(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); 

       int duration = cursor.getInt(cursor 
         .getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)); 

       Uri sArtworkUri = Uri 
         .parse("content://media/external/audio/albumart"); 
       Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId); 

       Logger.debug(albumArtUri.toString()); 
       Bitmap bitmap = null; 
       try { 
        bitmap = MediaStore.Images.Media.getBitmap(
          context.getContentResolver(), albumArtUri); 
        bitmap = Bitmap.createScaledBitmap(bitmap, 30, 30, true); 

       } catch (FileNotFoundException exception) { 
        exception.printStackTrace(); 
        bitmap = BitmapFactory.decodeResource(context.getResources(), 
          R.drawable.audio_file); 
       } catch (IOException e) { 

        e.printStackTrace(); 
       } 

       AudioListModel audioListModel = new AudioListModel(); 
       audioListModel.setArtist(artist); 
       audioListModel.setBitmap(bitmap); 
       audioListModel.setAlbum(album); 
       audioListModel.setTrack(track); 
       audioListModel.setData(data); 
       audioListModel.setAlbumId(albumId); 
       audioListModel.setDuration(duration); 
       audioListModel.setAlbumArtUri(albumArtUri); 

       audioArrayList.add(audioListModel); 

      } 

     } 

     public String getRealPathFromURI(Uri contentUri) { 
      String[] proj = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = context.getContentResolver().query(contentUri, proj, 
        null, null, null); 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } 

     private class GetAudioListAsynkTask extends AsyncTask<Void, Void, Boolean> { 

      private Context context; 
      private CustomProgressDialog progressDialog; 

      public GetAudioListAsynkTask(Context context) { 

       this.context = context; 
      } 

      @Override 
      protected void onPreExecute() { 
       progressDialog = new CustomProgressDialog(context, 
         AUDIO_LOADING_HEADING, AUDIO_LOADING_MSG); 
       progressDialog.setCancelable(false); 
       progressDialog.show(); 
       super.onPreExecute(); 

      } 

      @Override 
      protected Boolean doInBackground(Void... params) { 
       try { 
        initLayout(); 

        return true; 
       } catch (Exception e) { 
        return false; 

       } 

      } 

      @Override 
      protected void onPostExecute(Boolean result) { 
       progressDialog.dismiss(); 

       audioListAdapter = new AudioListAdapter(context, audioArrayList); 
       audioListView.setAdapter(audioListAdapter); 
       audioListView 
         .setOnItemClickListener(new AudioListItemClickListener(
           context, audioArrayList)); 

      } 
     } 

     @Override 
     protected void onPause() { 
      super.onPause(); 
      overridePendingTransition(0, 0); 
     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      UtilityClass.removeActivityOnFinish(this); 
     } 

     @Override 
     public void onBackPressed() { 
      super.onBackPressed(); 
      finish(); 
     } 

    } 
+2

長いalbumId = cursor.getLong(カーソル.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)); -1を返します。 – zanky

+0

すべてのアルバムにidがあります。カーソルからそのIDを取得しています –

+0

指定された列名の0から始まるインデックスを返します。列が存在しない場合はIllegalArgumentExceptionをスローします。列が存在するかどうかわからない場合は、getColumnIndex(String)を使用して-1をチェックしてください。これは例外をキャッチするよりも効率的です。 ------------------------------------------------ ------------------- 実際のデバイスでそれを実行する必要があるいくつかのアルバムがあります –

関連する問題