我想要从云中下载mp3文件,然后将下载的音频文件设置为铃声。我通过stackoverflow尝试了大量解决方案,并花了很多时间在Google中进行搜索,但没有任何好的结果。
更新:
我已经解决了我的问题&将我的解决方案放在下面的答案中。如果您面对我的问题,希望此代码可以帮助您修复它。
谢谢
在努力解决我的问题之后,尝试更多解决方案并将其中一些解决方案组合在一起。最后我修复了它&有我编辑的最终代码:
public void setAsRingtone(String url, String title) {
try {
String path = Environment.getExternalStorageDirectory() + "/ringtones/";
String fileName = title + ".mp3";
File ringtone = new File(path, fileName);
if (!ringtone.exists()) {
// Download Ringtone from the storage
Toast.makeText(com.tibadev.ahlyringtones.activities.MainActivity.this, "برجاء الانتظار لحين تحميل النغمة", Toast.LENGTH_SHORT).show();
DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setTitle(title);
request.setVisibleInDownloadsUi(true);
File download = new File(Environment.getExternalStorageDirectory() + "/ringtones/", title + ".mp3");
Uri parse = Uri.fromFile(download);
request.setDestinationUri(parse);
assert downloadManager != null;
downloadManager.enqueue(request);
}
// Set mp3 file as ringtone
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, ringtone.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, title);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put("_size", ringtone.length());
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtone.getAbsolutePath());
getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "="" + ringtone.getAbsolutePath() + """, null);
Uri newUri = com.tibadev.ahlyringtones.activities.MainActivity.this.getContentResolver().insert(uri, values);
try {
RingtoneManager.setActualDefaultRingtoneUri(getBaseContext(), RingtoneManager.TYPE_RINGTONE, newUri);
} catch (Exception e) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
.setData(Uri.parse("package:" + getPackageName()))
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}