zoukankan      html  css  js  c++  java
  • 如何编写程序设置Android来电铃声

          我们在拿到新手机后通常会为其设置来年铃声,那么怎样通过代码来设置Android来电铃声,本文就为大家实例讲解下。

           1、如果读到的是音频文件路径,需要先将音乐文件插入到多媒体库。

    Java代码
    1. //设置--铃声的具体方法     
    2.     public void setMyRingtone(String path)     
    3.     {      
    4.       File sdfile = new File(path);     
    5.       ContentValues values = new ContentValues();     
    6.       values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());     
    7.       values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());     
    8.       values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");       
    9.       values.put(MediaStore.Audio.Media.IS_RINGTONE, true);     
    10.       values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);     
    11.       values.put(MediaStore.Audio.Media.IS_ALARM, false);     
    12.       values.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    13.           
    14.       Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());     
    15.       Uri newUri = this.getContentResolver().insert(uri, values);     
    16.       RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);     
    17.       Toast.makeText( getApplicationContext (),"设置来电铃声成功!", Toast.LENGTH_SHORT ).show();     
    18.       System.out.println("setMyRingtone()-----铃声");     
    19.     }     
    20.     
    21.   //设置--提示音的具体实现方法     
    22.     public void setMyNotification(String path)     
    23.     {     
    24.        
    25.       File sdfile = new File(path);       
    26.       ContentValues values = new ContentValues();     
    27.       values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());     
    28.       values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());     
    29.       values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");       
    30.       values.put(MediaStore.Audio.Media.IS_RINGTONE, false);     
    31.       values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);     
    32.       values.put(MediaStore.Audio.Media.IS_ALARM, false);     
    33.       values.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    34.           
    35.       Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());     
    36.       Uri newUri = this.getContentResolver().insert(uri, values);     
    37.           
    38.       RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION, newUri);     
    39.       Toast.makeText( getApplicationContext (),"设置通知铃声成功!", Toast.LENGTH_SHORT ).show();     
    40.       System.out.println("setMyNOTIFICATION-----提示音");     
    41.     }     
    42.   //设置--闹铃音的具体实现方法     
    43.   public void setMyAlarm(String path)     
    44.     {     
    45.       File sdfile = new File(path);       
    46.       ContentValues values = new ContentValues();     
    47.       values.put(MediaStore.MediaColumns.DATA, sdfile.getAbsolutePath());     
    48.       values.put(MediaStore.MediaColumns.TITLE, sdfile.getName());     
    49.       values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*");       
    50.       values.put(MediaStore.Audio.Media.IS_RINGTONE, false);     
    51.       values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);     
    52.       values.put(MediaStore.Audio.Media.IS_ALARM, true);     
    53.       values.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    54.           
    55.       Uri uri = MediaStore.Audio.Media.getContentUriForPath(sdfile.getAbsolutePath());     
    56.       Uri newUri = this.getContentResolver().insert(uri, values);     
    57.       RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, newUri);     
    58.       Toast.makeText( getApplicationContext (),"设置闹钟铃声成功!", Toast.LENGTH_SHORT ).show();     
    59.       System.out.println("setMyNOTIFICATION------闹铃音");     
    60.     }   

           2、如果读取多媒体库的音频文件,设为铃声,使用以下方式:

           首先写一个常量类(定义想要设置为那种铃声的标示):

           AppConstant.java 

    Java代码
    1. public interface AppConstant {     
    2.      public static final int RINGTONE = 0;                   //铃声          
    3.      public static final int NOTIFICATION = 1;               //通知音           
    4.      public static final int ALARM = 2;                      //闹钟        
    5.      public static final int ALL = 3;                        //所有声音           
    6. }   

           此方法需要传入想要设置为铃声的全路径(如:/mnt/sdcard/mp3/a.mp3),和想要设置为哪种铃声的标示:

    Java代码
    1. private void setVoice(String path2,int id)       
    2. {     
    3.      ContentValues cv = new ContentValues();     
    4.      Uri newUri = null;        
    5.      Uri uri = MediaStore.Audio.Media.getContentUriForPath(path2);     
    6.       
    7.      // 查询音乐文件在媒体库是否存在       
    8.      Cursor cursor = this.getContentResolver().query(uri, null, MediaStore.MediaColumns.DATA + "=?", new String[] { path2 },null);        
    9.      if (cursor.moveToFirst() && cursor.getCount() > 0)      
    10.      {       
    11.           String _id = cursor.getString(0);       
    12.           switch (id) {        
    13.           case AppConstant.RINGTONE:        
    14.                cv.put(MediaStore.Audio.Media.IS_RINGTONE, true);       
    15.                cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);        
    16.                cv.put(MediaStore.Audio.Media.IS_ALARM, false);       
    17.                cv.put(MediaStore.Audio.Media.IS_MUSIC, false);       
    18.                break;       
    19.           case AppConstant.NOTIFICATION:        
    20.                cv.put(MediaStore.Audio.Media.IS_RINGTONE, false);       
    21.                cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);      
    22.                cv.put(MediaStore.Audio.Media.IS_ALARM, false);     
    23.                cv.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    24.                break;     
    25.           case AppConstant.ALARM:     
    26.                cv.put(MediaStore.Audio.Media.IS_RINGTONE, false);     
    27.                cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);     
    28.                cv.put(MediaStore.Audio.Media.IS_ALARM, true);     
    29.                cv.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    30.                break;     
    31.           case AppConstant.ALL:     
    32.                cv.put(MediaStore.Audio.Media.IS_RINGTONE, true);     
    33.                cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);     
    34.                cv.put(MediaStore.Audio.Media.IS_ALARM, true);     
    35.                cv.put(MediaStore.Audio.Media.IS_MUSIC, false);     
    36.                break;     
    37.           default:     
    38.                break;     
    39.       }     
    40.     
    41.       // 把需要设为铃声的歌曲更新铃声库     
    42.       getContentResolver().update(uri, cv, MediaStore.MediaColumns.DATA + "=?",new String[] { path2 });     
    43.       newUri = ContentUris.withAppendedId(uri, Long.valueOf(_id));     
    44.       // 一下为关键代码:     
    45.       switch (id) {     
    46.       case AppConstant.RINGTONE:     
    47.            RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);     
    48.            break;     
    49.       case AppConstant.NOTIFICATION:     
    50.            RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION, newUri);     
    51.            break;     
    52.       case AppConstant.ALARM:     
    53.            RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, newUri);     
    54.            break;     
    55.       case AppConstant.ALL:     
    56.            RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALL, newUri);     
    57.            break;     
    58.       default:     
    59.            break;     
    60.       }     
    61.     
    62.       //播放铃声     
    63.        //Ringtone rt = RingtoneManager.getRingtone(this, newUri);     
    64.       //rt.play();     
    65.    }     
    66. }    
  • 相关阅读:
    C# 线程之间切换
    工厂方法(创建型)
    单例模式(创建型)
    HTTP请求超时
    命令模式
    Asp.Net Core EF Migrations(二)
    Asp.Net Core EF Migrations
    Vue父子组件之间的通讯(学习笔记)
    数组的方法(笔记)
    Vue-router入门
  • 原文地址:https://www.cnblogs.com/xiaochao1234/p/3860418.html
Copyright © 2011-2022 走看看