【问题标题】:Android : Setting a sound from SD card as RingtoneAndroid : 将 SD 卡中的声音设置为铃声
【发布时间】:2011-06-21 02:55:35
【问题描述】:

我正在尝试根据我在应用程序中保存到 SD 卡上的声音设置铃声。在浏览了我能找到的所有帖子之后,我相信我已经接近了,只是没有定义 URI 的权利。

       File ringPath = new File(path, filename);

       ContentValues values = new ContentValues();
       values.put(MediaStore.MediaColumns.DATA, ringPath.getAbsolutePath());
       values.put(MediaStore.MediaColumns.TITLE, "temptitle");
       values.put(MediaStore.MediaColumns.SIZE, ringPath.length());
       values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
       values.put(MediaStore.Audio.Media.ARTIST, "tempartist");
       values.put(MediaStore.Audio.Media.IS_RINGTONE, true);

       uri = Uri.fromFile(ringPath);
       RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, uri);

通常,URI 的定义更像:

Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringPath.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);

但我并没有完全明白这一切的意义,它给了我相当严重的错误(并不是说它们可能比我现在的错误更糟)。我确信这是执行此操作所需的方法,但我的代码中的 uri 实际上返回了正确的路径(而另一个没有,可能由于我的误用而授予),所以我不明白为什么它不会工作。虽然老实说,我不明白为此必须使用 URI,而不是指定路径。

如果有人能给我一点解释,或者在某个地方给我链接,这样我就可以真正理解这一点并解决这个问题,我将非常感激。

【问题讨论】:

  • 您为您的应用授予了哪些权限?您必须确保您的应用有权访问 SD 卡。
  • 我已经授予了写入外部存储的权限,并且我知道它设置正确,因为我可以将声音保存到 SD 卡上。我认为从卡中读取不需要任何权限,我只是仔细检查以确保。

标签: android path audio uri ringtone


【解决方案1】:

通过进入菜单->设置->应用程序->开发关闭手机调试然后取消选中该框。很高兴。

【讨论】:

    【解决方案2】:

    我认为你的问题是没有找到路径。所以我建议你先检查你的文件在这一行之后是否真的存在

     File ringPath = new File(path, filename);
    

    使用代码:

    boolean b=ringPath.exists();
    

    如果它返回 true,那么您就可以从中获取 uri。然后在我认为没有错误之后,我可以在您的代码中看到。

    【讨论】:

    • 我之前用过那个检查来确保它是,但我又做了一次,是的,它确实返回了 true。经过一段时间的修补后,声音现在确实出现在铃声列表中并且可以正常工作,但是当它第一次尝试将其设置为铃声时,它以某种方式失败了。它用一些默认环代替它。最坏的情况我可以这样使用它,但我希望它在用户要求时完全设置铃声。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多