Android设置振铃
16lz
2021-01-23
--
layout: blog
title: 'Android设置振铃'
date: 2017-06-20 12:11:34
categories: blog
tags: code
image: ''
lead-text: 'Android置振铃()(来电铃声)时的权限问题'
Android设置振铃需要更改系统设置,所以在6.0以后提高了权限级别,需要使用 WRITE_SETTINGS 权限才能进行振铃设置
普通的设置振铃方法
public static void setRingtoneImpl(String path2, int id) { L.E("DownloadTask#setVoiceImpl " + "开始设置振铃"); ContentValues cv = new ContentValues(); Uri newUri = null; Uri uri = MediaStore.Audio.Media.getContentUriForPath(path2); // 查询音乐文件在媒体库是否存在 Cursor cursor = MainApplication.getContext().getContentResolver().query(uri, null, MediaStore.MediaColumns.DATA + "=?", new String[]{path2}, null); if (cursor.moveToFirst() && cursor.getCount() > 0) { String _id = cursor.getString(0); switch (id) { case RingConstant.RINGTONE: cv.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); cv.put(MediaStore.Audio.Media.IS_RINGTONE, true); cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); cv.put(MediaStore.Audio.Media.IS_ALARM, false); cv.put(MediaStore.Audio.Media.IS_MUSIC, false); break; case RingConstant.NOTIFICATION: cv.put(MediaStore.Audio.Media.IS_RINGTONE, false); cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); cv.put(MediaStore.Audio.Media.IS_ALARM, false); cv.put(MediaStore.Audio.Media.IS_MUSIC, false); break; case RingConstant.ALARM: cv.put(MediaStore.Audio.Media.IS_RINGTONE, false); cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); cv.put(MediaStore.Audio.Media.IS_ALARM, true); cv.put(MediaStore.Audio.Media.IS_MUSIC, false); break; case RingConstant.ALL: cv.put(MediaStore.Audio.Media.IS_RINGTONE, true); cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); cv.put(MediaStore.Audio.Media.IS_ALARM, true); cv.put(MediaStore.Audio.Media.IS_MUSIC, false); break; default: break; } // 把需要设为铃声的歌曲更新铃声库 MainApplication.getContext().getContentResolver().update(uri, cv, MediaStore.MediaColumns.DATA + "=?", new String[]{path2}); newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id)); // 一下为关键代码: switch (id) { case RingConstant.RINGTONE: RingtoneManager.setActualDefaultRingtoneUri(MainApplication.getContext(), RingtoneManager.TYPE_RINGTONE, newUri); Toast.makeText(MainApplication.getContext(), "设置来电铃声成功!", Toast.LENGTH_SHORT).show(); break; case RingConstant.NOTIFICATION: RingtoneManager.setActualDefaultRingtoneUri(MainApplication.getContext(), RingtoneManager.TYPE_NOTIFICATION, newUri); break; case RingConstant.ALARM: RingtoneManager.setActualDefaultRingtoneUri(MainApplication.getContext(), RingtoneManager.TYPE_ALARM, newUri); break; case RingConstant.ALL: RingtoneManager.setActualDefaultRingtoneUri(MainApplication.getContext(), RingtoneManager.TYPE_ALL, newUri); break; default: break; } } else { setMyRingtone(path2); } } //设置--铃声的具体方法 public static void setMyRingtone(String path) { File sdfile = new File(path); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, sdfile.getName()); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC, false); Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath()); Uri newUri = MainApplication.getContext().getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(MainApplication.getContext(), RingtoneManager.TYPE_RINGTONE, newUri); Toast.makeText(MainApplication.getContext(), "设置来电铃声成功!", Toast.LENGTH_SHORT).show(); }
上面设置振铃的方法如果在6.0之前不需要权限能够直接设置成功,在6.0之后的版本需要 WRITE_SETTINGS 权限
获取 WRITE_SETTINGS 权限
此权限不能直接通过动态权限来获取,需要引导到权限设置页面手动打开,所以要先打开设置权限的activity,根据返回来判断权限是否打开
public static void checkWriteSettingsPermission(Activity activity, String path, int id) { // 如果有了权限,就不会再进入activity了 if (!Settings.System.canWrite(activity)) { // 打开获取权限的activity Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + activity.getPackageName())); if (!StringUtils.isEmpty(path)) { intent.putExtra("path", path); intent.putExtra("id", id); L.E("RingToneUtil#checkWriteSettingsPermission " + "intent = " + intent); } // 将数据传递到activity中,在获取了权限返回后进行操作操作 ((BaseActivity) activity).addRingToneInfo(path, id); activity.startActivityForResult(intent, REQUEST_CODE); } else { setRingtoneImpl(path, id); } }
更多相关文章
- Android初学习 - android:sharedUserId="android.uid.system" 应
- Android 权限相关问题
- android系统权限关机重启
- Android 9.0 (P版本) SystemServer中的服务配置se linux权限
- System Permissions—— android系统权限
- Android的权限 permission
- 在android获取root权限的方法^_^。
- Android学习笔记_20_访问应用权限汇总
- Android系统权限和root权限