微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在android studio中将下载的声音设置为铃声?

如何解决如何在android studio中将下载的声音设置为铃声?

我从 url 下载了一些铃声,我正在尝试设置为铃声。

下载方法

public void downloadringtones(Uri uri,String title) {
    request = new DownloadManager.Request(uri);
    //String title = URLUtil.guessFileName(String.valueOf(uri),null,null);
    request.setTitle(title);
    request.setDescription("Downloading  File please wait...");
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_ringtoneS,title);

    downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
    id = downloadManager.enqueue(request);
    //String s = downloadManager.getMimeTypeForDownloadedFile(id);
    Toast.makeText(this,"Downloading...",Toast.LENGTH_SHORT).show();
}

类型确定方法

public int setType(String type,ContentValues values) {
    if (type.equals("ringtone")) {
        values.put(MediaStore.Audio.Media.IS_ringtone,true);
        return ringtoneManager.TYPE_ringtone;
    } else if (type.equals("alarm")) {
        values.put(MediaStore.Audio.Media.IS_ALARM,true);
        return ringtoneManager.TYPE_ALARM;
    } else if (type.equals("notif")) {
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION,true);
        return ringtoneManager.TYPE_NOTIFICATION;
    } else if (type.equals("person")) {
        setPersonalringtone(downloaded_uri);
    }
    return -1;
}

设置方法(由于 broadcastReceiver 下载完成时的启动方法

public void setringtone(Uri mUri,String title,String type) {
    downloadringtones(mUri,title);
    broadcastReceiver.setDownloadCompletedListener(uri -> {

        ContentValues values = new ContentValues();
        File file = new File(uri.getPath());
        downloaded_uri = uri;
        String uri_id = downloaded_uri.getLastPathSegment();
        int set_type = setType(type,values);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            if (!Settings.System.canWrite(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                startActivity(intent);
            } else {
                values.put(MediaStore.Audio.Media._ID,uri_id);
                values.put(MediaStore.Audio.Media.disPLAY_NAME,title);
                values.put(MediaStore.Audio.Media.MIME_TYPE,"audio/mpeg");
                Uri tempuri = MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
                Uri newUri = getBaseContext().getContentResolver()
                        .insert(tempuri,values);
                ringtoneManager.setActualDefaultringtoneUri(this,set_type,newUri);
                Toast.makeText(this,"ringtone Set",Toast.LENGTH_SHORT).show();
            }
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (!Settings.System.canWrite(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                startActivity(intent);
            } else {
                values.put(MediaStore.MediaColumns.DATA,file.getAbsolutePath());
                values.put(MediaStore.MediaColumns.TITLE,title);
                values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/mpeg");
                Uri tempuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                IslamicringtonesMainActivity.this.getContentResolver()
                        .delete(tempuri,MediaStore.MediaColumns.DATA + "=\"" + file.getAbsolutePath() + "\"",null);
                Uri newUri = IslamicringtonesMainActivity.this.getContentResolver()
                        .insert(tempuri,Toast.LENGTH_SHORT).show();
            }
        } else {
            values.put(MediaStore.MediaColumns.DATA,file.getAbsolutePath());
            values.put(MediaStore.MediaColumns.TITLE,title);
            values.put(MediaStore.MediaColumns.MIME_TYPE,"audio/mpeg");
            Uri tempuri = MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath());
            IslamicringtonesMainActivity.this.getContentResolver()
                    .delete(tempuri,null);
            Uri newUri = IslamicringtonesMainActivity.this.getContentResolver()
                    .insert(tempuri,values);
            ringtoneManager.setActualDefaultringtoneUri(this,newUri);
            Toast.makeText(this,Toast.LENGTH_SHORT).show();
        }
    },request,downloadManager,id);
}

我的广播接收器

public class DownloadbroadcastReceiver extends broadcastReceiver {
private downloadCompletedListener completedListener;
DownloadManager downloadManager;
DownloadManager.Request request;
long id;

@Override
public void onReceive(Context context,Intent intent) {
    if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())) {
        if(id > 0){
            completedListener.onDownloaded(downloadManager.getUriForDownloadedFile(id));
        }
    }
}

public interface downloadCompletedListener {
    void onDownloaded(Uri uri);
}

public void setDownloadCompletedListener(downloadCompletedListener listener,DownloadManager.Request request,DownloadManager downloadManager,long id) {
    this.completedListener = listener;
    this.request = request;
    this.downloadManager = downloadManager;
    this.id = id;
}

当我进入铃声设置(手机设置)时,我会看到我设置为铃声的歌曲名称,但是当有人打电话给我时,它什么也不播放。 预先感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。