代码之家  ›  专栏  ›  技术社区  ›  Oktawian

为什么我的ContentValues中的newUri为null?以编程方式设置铃声

  •  0
  • Oktawian  · 技术社区  · 7 年前

    I have found a lot of ways to do it but nothing works. 其中一种方式如下所示:

     private void setSongAsRingtone(Song song){
            File ringFile = new File(song.getPath());
    
            Log.d(tag, "Ring name: " + ringFile.getName());
            Log.d(tag, "Ring absolute path: " + ringFile.getAbsolutePath());
            Log.d(tag, "Activity: " + getActivity().toString());
    
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.DATA, ringFile.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE, song.getTitle());
            values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
            values.put(MediaStore.MediaColumns.SIZE, 26454);
            values.put(MediaStore.Audio.Media.ARTIST, song.getArtist());
            values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
            values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
            values.put(MediaStore.Audio.Media.IS_ALARM, true);
            values.put(MediaStore.Audio.Media.IS_MUSIC, false);
    
            Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringFile.getAbsolutePath());
            Uri newUri = getActivity().getContentResolver().insert(uri, values);
            RingtoneManager.setActualDefaultRingtoneUri(getActivity(), RingtoneManager.TYPE_RINGTONE, newUri);
        }
    

    Logcat说:

    D/RingtoneDialogFragment: Ring name: Jamal - Peron [Official Music Video].m4a
    D/RingtoneDialogFragment: Ring absolute path: /storage/emulated/0/storage/emulated/0/Download/Jamal - Peron [Official Music Video].m4a
    D/RingtoneDialogFragment: Activity: com.linkplayer.linkplayer.main.MainActivity@7bc8453
    I/RingtoneManager: Save cache type :1, URI : content://0@media/external/audio/media/10557
    W/RingtoneManager: Failed to open directly; attempting failover: java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
    W/RingtoneManager: Failed to cache ringtone: java.io.IOException: java.lang.SecurityException: Uri is not ringtone, alarm, or notification: content://0@media/external/audio/media/10557
    I/RingtoneManager: ringtone title : Jamal - Peron [Official Music Video], DRM : 0
    

    但是 newUri对象为空 我有 一些错误

    提前谢谢你的帮助。祝你晚上愉快。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Oktawian    7 年前

    我必须在插入(创建newUri)之前调用此方法:

    String filePathToDelete = MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"";
    getActivity().getContentResolver().delete(uri, filePathToDelete, null);