设置手机铃声时出现问题

时间:2012-05-24 03:55:11

标签: android ringtone

我正在尝试让Android程序设置手机的铃声。当我运行下面的代码一次,铃声设置正确,工作正常。但是,如果我不止一次运行代码,铃声就会变得沉默。任何帮助解决这个问题都将非常感激。

    void setRingtone() {
    //File path = Environment.getExternalStorageDirectory();

    //File file = new File(path, "ringtone.mp3"); 


    File file = new File("/sdcard/", "ringtone.mp3");
    Uri mUri = Uri.parse("android.resource://com.*****.*****/" + R.raw.*****);
    ContentResolver mCr = getContentResolver();

    ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
    values.put(MediaStore.MediaColumns.TITLE, "my ringtone");
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/oog");
    values.put(MediaStore.MediaColumns.SIZE, file.length());
    values.put(MediaStore.Audio.Media.ARTIST, R.string.app_name);
    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(file.getAbsolutePath());
    Uri newUri = mCr.insert(uri, values);

    try {
        RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), RingtoneManager.TYPE_RINGTONE, newUri);
    } catch (Throwable t) {}

}

1 个答案:

答案 0 :(得分:3)

问题是RingtoneManager.setActualDefaultRingtoneUri将文件路径添加到数据库,并将标识作为铃声。由于文件路径已经在数据库中,因此存在一些错误,并且该值变为null(如果我理解正确的话)。这就是为什么它只能在设置后第一次工作。要解决此问题,您需要先删除引用。这是代码。

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