Android Studio: установить mp3 из необработанной папки в качестве мелодии звонка устройства в 2020 году - PullRequest
0 голосов
/ 13 июля 2020

Я бы хотел установить необработанный mp3-файл, который находится в моей исходной папке, в качестве мелодии звонка устройства (используя java). К сожалению, старые руководства больше не работают, часто потому, что вам нужны разрешения на запись. Я пробовал все, но ни одно решение не работает (все решения очень старые ...).

Кто-нибудь может мне помочь, пожалуйста? Есть ли у кого-нибудь хороший пример кода для этой проблемы?

1 Ответ

0 голосов
/ 14 июля 2020

Если вы не возражаете поместить свой файл в папку с ресурсами, вы можете сделать это:

  • скопировать mp3 из ресурсов в доступную память устройства

  • установите новый скопированный файл в качестве мелодии звонка, используя

                        void set_asset_ringtone(Context context, String output_file_path, String asset_name) throws IOException {
    
                         ///////////////copying from assets to filepath////////////////
                     InputStream externalDbStream = context.getAssets().open(asset_name);
                     String outFileName =output_file_path+"/"+asset_name;
    
                     OutputStream localDbStream = new FileOutputStream(outFileName);
    
                     byte[] buffer = new byte[1024];
                     int bytesRead;
                     while ((bytesRead = externalDbStream.read(buffer)) > 0) {
                         localDbStream.write(buffer, 0, bytesRead);
                     }
                     localDbStream.close();
                     externalDbStream.close();
                     //////Setting the ringtone /////////////////
                     File rigntone_file=new File(outFileName);
                     ContentValues values = new ContentValues();
                     values.put(MediaStore.MediaColumns.DATA, rigntone_file.getAbsolutePath());
                     values.put(MediaStore.MediaColumns.TITLE, "ring");
                     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
                     values.put(MediaStore.MediaColumns.SIZE, rigntone_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(rigntone_file.getAbsolutePath());
                     Uri newUri = getContentResolver().insert(uri, values);
    
    
                     try {
                         RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri);
                     } catch (Throwable t) {
    
                     }
    
                 }
    

Вам понадобятся эти разрешения

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

И, возможно,

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...