当前位置: 代码迷 >> Android >> 无法设置为铃声,因为文件已存在
  详细解决方案

无法设置为铃声,因为文件已存在

热度:26   发布时间:2023-08-04 12:32:12.0

我正在尝试将设置为铃声功能的应用制作成手机,但出现问题。 当我设置为铃声后,它就开始工作了。 但是当我第二次尝试设置为铃声时,什么也没发生。 现在的问题是因为文件已经存在。 如何将我的代码设置为喜欢...如果文件已存在,请继续执行下一步这是我的代码:

private File rsound;
private final File rpath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES);

private void s1ring() {
                Boolean success = false;
                rsound = new File(rpath, " Thesound.mp3");
                if (!rsound.exists()) {

                    try {
                        InputStream in = getResources().openRawResource(R.raw.s1a64);
                        FileOutputStream out = new 

FileOutputStream(rsound.getPath());
                        byte[] buff = new byte[1024];
                        int read = 0;

                        try {
                            while ((read = in.read(buff)) > 0) {
                                out.write(buff, 0, read);
                            }
                        } finally {
                            in.close();

                            out.close();
                        }
                    } catch (Exception e) {
                        success = false;

                    }
                } else {
                    success = true;

                }

                if (!success) { 
                   setRingtone();


                }
            }

            private void setRingtone() {
                ContentValues values = new ContentValues();
                   values.put(MediaStore.MediaColumns.DATA, rsound.getAbsolutePath());
                   values.put(MediaStore.MediaColumns.TITLE, "Thesound");
                   values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
                   values.put(MediaStore.Audio.Media.ARTIST, "The ringtones");
                   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, true);

                   Uri uri = MediaStore.Audio.Media.getContentUriForPath(rsound.getAbsolutePath());
                   getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + rsound.getAbsolutePath() + "\"",
                           null);
                   Uri newUri = getContentResolver().insert(uri, values);

                   RingtoneManager.setActualDefaultRingtoneUri(
                           S1.this, RingtoneManager.TYPE_RINGTONE,
                           newUri);
                   Toast.makeText(getApplicationContext(), "Ringtone set successfully",
                           Toast.LENGTH_SHORT).show();

            }


            }
        );

像这样调整您的代码:

            if (!rsound.exists()) {
                //your create sound file code here.

            } else {
                //call set ringtone method also for the case file exists:
                setRingtone();
            }

音频仅设置为一次铃声,但是解决此问题的方法是-如果您尝试再次运行相同的代码,则将在MediaStore的表中插入重复的条目,但是SQLite数据库不允许这样做。 您必须重命名文件并添加文件的另一个实例,或者进入,删除条目,然后重试。 因此,我每次都删除该条目,然后再次插入。

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null);
Uri newUri = getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(activity.this,
        RingtoneManager.TYPE_RINGTONE, newUri);
  相关解决方案