美文网首页
Android通过代码设置铃声

Android通过代码设置铃声

作者: J_xs | 来源:发表于2017-12-05 20:41 被阅读57次
    对安卓手机进行铃声操作,设置默认铃声、删除当前默认铃声、更改铃声
    

    以默认振铃为例子,通过代码设置手机铃声

    设置默认振铃

        // 将铃声的路径插入contentResolver,以数据库的形式插入
        /**
         * 设置默认振铃
         * @param musicInfo 歌曲信息
         * @param ringtoneFile 振铃文件,包含绝对路径
         */
            private void setRingtoneImpl(MusicInfo musicInfo, File ringtoneFile) {
            ContentValues content = new ContentValues();
            content.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath());
            content.put(MediaStore.MediaColumns.TITLE, musicInfo.getSongName());
            //content.put(MediaStore.MediaColumns.SIZE, ringtoneFile);
            content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");
            //  content.put(MediaStore.Audio.Media.ARTIST, "Madonna");
            //content.put(MediaStore.Audio.Media.DURATION, 230);
            content.put(MediaStore.Audio.Media.IS_RINGTONE, true);
            content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
            content.put(MediaStore.Audio.Media.IS_ALARM, true);
            content.put(MediaStore.Audio.Media.IS_MUSIC, false);
            // 获取文件是external还是internal的uri路径
            Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath());
            // 铃声通过contentvaues插入到数据库
            final Uri newUri = getContentResolver().insert(uri, content);
            currentRingtoneUri = newUri;
            RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(),
                    RingtoneManager.TYPE_RINGTONE, newUri);
        }
    

    删除默认振铃

    删除铃声操作,参考:

        private void deleteRingtone(Uri deleteUri, File deleteFile) {
            ContentValues cv = new ContentValues();
            cv.put(MediaStore.Audio.Media.IS_RINGTONE, false);
            cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
            cv.put(MediaStore.Audio.Media.IS_ALARM, false);
            cv.put(MediaStore.Audio.Media.IS_MUSIC, true);
            // 更新当前铃声的数据,放弃作为铃声的状态
            getContentResolver().delete(deleteUri, MediaStore.MediaColumns.DATA + "=?",
                    new String[] { deleteFile.getAbsolutePath() });
        }
    

    判断当前uri是否默认铃声的uri,因为当我们删除一个铃声之后,再次通过获取默认铃声的方式获取到的uri是不正确的可能,可以通过下面这种获取uri的文件路径的方式,如果路径为空,表示当前uri不是默认振铃的
    判断当前uri是否默认炫铃

       // 根据uri获取文件路径
        private String getPathFromUri(Uri contentUri) {
            String[] projection = { MediaStore.Audio.Media.DATA };
            String urlpath;
            CursorLoader loader = new CursorLoader(this, contentUri, projection, null, null, null);
            Cursor cursor = loader.loadInBackground();
            try {
                int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                urlpath = cursor.getString(column_index);
                //如果是正常的查询到数据库。然后返回结构
                return urlpath;
            } catch (Exception e) {
                urlpath = "";
                e.printStackTrace();
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
            return urlpath;
        }
    

    如果文件路径为空,那么表示当前不是默认铃声,此时,此时使用vivo在设置里面仍然会跳出到默认的铃声,但是比如在铃声多多里面获取的结果仍然是显示当前没有设置铃声。

    相关文章

      网友评论

          本文标题:Android通过代码设置铃声

          本文链接:https://www.haomeiwen.com/subject/qdthixtx.html