【问题标题】:Android Studio: Set mp3 from raw folder as device ringtone in 2020Android Studio:将原始文件夹中的 mp3 设置为 2020 年的设备铃声
【发布时间】:2020-07-13 19:45:06
【问题描述】:

我想将位于我的原始文件夹中的原始 mp3 文件设置为设备铃声(使用 java)。不幸的是,旧教程不再适用,通常是因为您需要一些写入权限。我尝试了所有方法,但没有任何解决方案有效(这些解决方案都非常旧......)。

谁能帮帮我?有没有人解决这个问题的好代码示例?

【问题讨论】:

标签: java android android-studio ringtone


【解决方案1】:

如果您不介意将文件放在 assets 文件夹中,那么您可以这样做:

  • 将您的 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" />

【讨论】:

  • 谢谢!你用什么作为 output_file_path?我用过: String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath(); path=(exStoragePath +"/media/alarms/");但后来我在这一行得到一个 FileNotFoundException: OutputStream localDbStream = new FileOutputStream(outFileName);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多