Content Resolver查询仅在运行Lollipop的Samsung Galaxy S4上返回空光标

时间:2016-03-31 15:05:15

标签: android

我有这个代码,我已经在一些设备上进行了测试,除了运行Lollipop的三星Galaxy S4外,还可以使用它们。 getContentResolver().query()方法每次都返回一个空光标。如果if / else语句转到else,因此,并尝试insert我得到另一个null作为insert的结果

        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);
        }

1 个答案:

答案 0 :(得分:0)

原来from Tkinter import * from PIL import ImageTk, Image import os root = Tk() img = ImageTk.PhotoImage(Image.open("9.jpg")) panel = Label(root, image = img) panel.pack(side = "bottom", fill = "both", expand = "yes") root.mainloop() 方法不会插入铃声,如果它不是唯一的,我无法正确查询insert所以我试图插入已经存在的东西那里。

我应该修复我查询它的方式,这很奇怪,因为在其他设备上它可以工作,或者这样做:

Uri

getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); 之前删除已存在的文件,并允许我重新query,现在insert不再返回null。有点蛮力解决方案,但它帮助了我。