如何从存储在外部存储中的音频文件中设置Android铃声



我想要从云中下载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();
}

}

最新更新