2016-03-31 4 views
0

私はこのコードを持っており、Lollipopを実行しているSamsung Galaxy S4を除いて、いくつかのデバイスで動作確認しました。 getContentResolver().query()メソッドは、毎回空のカーソルを返します。もし/ else文は、そのため、他に行く、とinsertをしようとした場合、私はinsertコンテンツリゾルバークエリは、Lollipopを実行しているSamsung Galaxy S4にのみ空のカーソルを返します

 String mediaTitle = String.format("My Artist%s", title); 
     ContentValues values = new ContentValues(); 
     values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
     values.put(MediaStore.MediaColumns.TITLE, mediaTitle); 
     values.put(MediaStore.MediaColumns.SIZE, k.length()); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
     values.put(MediaStore.Audio.Media.ARTIST, "My Artist"); 
     values.put(MediaStore.Audio.Media.IS_RINGTONE, false); 
     values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
     values.put(MediaStore.Audio.Media.IS_ALARM, false); 
     values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

     Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); 
     String selection = String.format("%s = ?", MediaStore.MediaColumns.TITLE); 
     c = getContentResolver().query(uri, null, selection, new String[]{mediaTitle}, null); // RETURNS NULL only on Samsung Galaxy S4 with Lollipop 

     if (c.moveToFirst()) { 
      return uri.buildUpon().appendPath(String.valueOf(c.getInt(c.getColumnIndex(MediaStore.MediaColumns._ID)))).build(); 
     } else { 
      return getContentResolver().insert(uri, values); 
     } 

答えて

0

の結果として、別のヌルを取得するには、「それはにISN場合insert方法は、着信音を挿入しませんが判明します一意ではないと私はそのためUriを正しく照会することができませんでしたので、私はすでにそこにあったものを挿入しようとしていました。

私は、他のデバイス上でそれが働いていたので、奇妙である私はそれを照会する方法を、固定、またはこれを行うにしている必要があり、次のいずれかがすでにあるファイルを削除query、前

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); 

、私にinsertを新しく許可しました。そして、insertはもはやnullを返しません。 brute forceソリューションのビットですが、それは私を助けました。

+0

おそらく 'getContentResolver()。update(...')を使うべきでしょう。 – Fhl