установить рингтон из URL с RecyclerView в классе адаптера (Android) - PullRequest
0 голосов
/ 02 января 2019

Я хочу установить мелодию при загрузке mp3 с URL и нажать кнопку setRingtoneButton.Я думаю, что я сделал большую часть работы, но некоторые из них отсутствуют.Если я скачаю mp3 и нажму кнопку «Установить мелодию звонка», звук устройства изменится, но он будет «тихим» вместо выбранного мною mp3.

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                                if (!Settings.System.canWrite(context.getApplicationContext())) {
                                    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + context.getPackageName()));
                                    ((Activity) context).startActivityForResult(intent, 200);

                                } else {


                                    File k = new File(Environment.getExternalStorageDirectory() + File.separator + "AppName" + File.separator + item.getRing().getName() + ".mp3"); // path is a file to /sdcard/media/ringtone

                                    if (k.exists()) {

                                        ContentValues values = new ContentValues();
                                        values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
                                        values.put(MediaStore.Audio.Media.ARTIST, "Artist");
                                        values.put(MediaStore.MediaColumns.SIZE, 330);
                                        values.put(MediaStore.MediaColumns.TITLE, item.getRing().getName());
                                        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
                                        values.put(MediaStore.Audio.Media.DURATION, item.getRing().getDuration());
                                        values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
                                        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
                                        values.put(MediaStore.Audio.Media.IS_ALARM, false);
                                        values.put(MediaStore.Audio.Media.IS_MUSIC, false);


                                        //Insert it into the database
                                        Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
                                        //context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" +k.getAbsolutePath() + "\"", null);

                                        Uri newUri = context.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);


                                        RingtoneManager ringtoneManager = new RingtoneManager(context);
                                        try {
                                            Uri rUri = RingtoneManager.getValidRingtoneUri(context);
                                            if (rUri != null)
                                                ringtoneManager.setStopPreviousRingtone(true);

                                            RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),
                                                    RingtoneManager.TYPE_RINGTONE,
                                                    newUri);
                                            Toast.makeText(context, "set ringtone", Toast.LENGTH_SHORT).show();
                                        } catch (Throwable t) {
                                            Log.e(TAG, "catch exception");
                                        }
                                        Toast.makeText(context, context.getString(R.string.adapter_ringtonesuccessmsg), Toast.LENGTH_SHORT).show();
                                    } else {
                                        Toast.makeText(context, context.getString(R.string.adapter_errordownloadmessage), Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }

Я не могу это исправить, несмотря на все мои усилия.

1 Ответ

0 голосов
/ 02 января 2019

Я изменяю эти столбцы;

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());

Uri newUri = context.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);

на

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

Uri newUri = context.getContentResolver().insert(uri, values);

И таким образом я могу установить мелодию звонка из URL.

...