私はこのコードを持っており、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);
}
おそらく 'getContentResolver()。update(...')を使うべきでしょう。 – Fhl