博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发之手机铃声代码实现
阅读量:4149 次
发布时间:2019-05-25

本文共 3007 字,大约阅读时间需要 10 分钟。

对于Android应用开发来说,铃声是一个非常重要的需求,网上查了很多例子,都有点问题,综合几个自己写了个可以设置铃声、通知声音、闹钟声音和所有声音功能的方法。

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

AppConstant.java
 
public
 interface AppConstant {

     
public
 static final 
int
 RINGTONE 
=
 
0
;                   
//
铃声
 
     
public
 static final 
int
 NOTIFICATION 
=
 
1
;               
//
通知音
 
     
public
 static final 
int
 ALARM 
=
 
2
;                      
//
闹钟

    
public
 static final 
int
 ALL 
=
 
3
;                        
//
所有声音
 
}

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

private
 void setVoice(
String
 path2,
int
 id)
  
2
 
  
3
     {

  
4
 
  
5
        ContentValues cv 
=
 
new
 ContentValues();
  
6
 
  
7
        Uri newUri 
=
 
null
;
  
8
 
  
9
        Uri uri 
=
 MediaStore.Audio.Media.getContentUriForPath(path2);
10
 
11
        
//
 查询音乐文件在媒体库是否存在
12
 
13
        Cursor cursor 
=
 this.getContentResolver().query(uri, 
null
, MediaStore.MediaColumns.DATA 
+
 
"
=?
"
new
 
String
[] { path2 },
null
);
14
 
15
        
if
 (cursor.moveToFirst() 
&&
 cursor.getCount() 
>
 
0
)
16
 
17
        {

18
 
19
            
String
 _id 
=
 cursor.getString(
0
);
20
 
21
            switch (id) {

22
 
23
               
case
 AppConstant.RINGTONE:
24
 
25
                   cv.put(MediaStore.Audio.Media.IS_RINGTONE, 
true
);
26
 
27
                   cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, 
false
);
28
 
29
                   cv.put(MediaStore.Audio.Media.IS_ALARM, 
false
);
30
 
31
                   cv.put(MediaStore.Audio.Media.IS_MUSIC, 
false
);
32
 
33
                   break;
34
 
35
               
case
 AppConstant.NOTIFICATION:
36
 
37
                   cv.put(MediaStore.Audio.Media.IS_RINGTONE, 
false
);
38
 
39
                   cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, 
true
);
40
 
41
                   cv.put(MediaStore.Audio.Media.IS_ALARM, 
false
);
42
 
43
                   cv.put(MediaStore.Audio.Media.IS_MUSIC, 
false
);
44
 
45
                   break;
46
 
47
               
case
 AppConstant.ALARM:
48
 
49
                   cv.put(MediaStore.Audio.Media.IS_RINGTONE, 
false
);
50
 
51
                   cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, 
false
);
52
 
53
                   cv.put(MediaStore.Audio.Media.IS_ALARM, 
true
);
54
 
55
                   cv.put(MediaStore.Audio.Media.IS_MUSIC, 
false
);
56
 
57
                   break;
58
 
59
               
case
 AppConstant.ALL:
60
 
61
                   cv.put(MediaStore.Audio.Media.IS_RINGTONE, 
true
);
62
 
63
                   cv.put(MediaStore.Audio.Media.IS_NOTIFICATION, 
true
);
64
 
65
                   cv.put(MediaStore.Audio.Media.IS_ALARM, 
true
);
66
 
67
                   cv.put(MediaStore.Audio.Media.IS_MUSIC, 
false
);
68
 
69
                   break;
70
 
71
    
72
 
73
               default:
74
 
75
                   break;
76
 
77
            }
78
 
79
           
80
 
81
            
//
 把需要设为铃声的歌曲更新铃声库
82
 
83
            getContentResolver().update(uri, cv, MediaStore.MediaColumns.DATA 
+
 
"
=?
"
,
new
 
String
[] { path2 });
84
 
85
            newUri 
=
 ContentUris.withAppendedId(uri, 
Long
.valueOf(_id));
86
 
87
           
88
 
89
          
//
 一下为关键代码:
90
 
91
            switch (id) {

92
 
93
               
case
 AppConstant.RINGTONE:
94
 
95
                   RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri);
96
 
97
                   break;
98
 
99
               
case
 AppConstant.NOTIFICATION:
100
 
101
                   RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION, newUri);
102
 
103
                   break;
104
 
105
               
case
 AppConstant.ALARM:
106
 
107
                  RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALARM, newUri);
108
 
109
                   break;
110
 
111
               
case
 AppConstant.ALL:
112
 
113
                   RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_ALL, newUri);
114
 
115
                   break;
116
 
117
    
118
 
119
               default:
120
 
121
                   break;
122
 
123
            }
124
 
125
           
126
 
127
            
//
播放铃声
129
 
//
         Ringtone rt 
=
 RingtoneManager.getRingtone(this, newUri);
131
 
//
         rt.play();
133
        }
135
     }

转载地址:http://gxvti.baihongyu.com/

你可能感兴趣的文章
作为码农你希望面试官当场指出你错误么?有面试官这样遭到投诉!
查看>>
好多程序员都认为写ppt是很虚的技能,可事实真的是这样么?
查看>>
如果按照代码行数发薪水会怎样?码农:我能刷到公司破产!
查看>>
程序员失误造成服务停用3小时,只得到半月辞退补偿,发帖喊冤
查看>>
码农:很多人称我“技术”,感觉这是不尊重!纠正无果后果断辞职
查看>>
php程序员看过来,这老外是在吐糟你吗?看看你中了几点!
查看>>
为什么说程序员是“培训班出来的”就是鄙视呢?
查看>>
码农吐糟同事:写代码低调点不行么?空格回车键与你有仇吗?
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>
一道技术问题引起的遐想,最后得出结论技术的本质是多么的朴实!
查看>>
985硕士:非科班自学编程感觉还不如培训班出来的,硕士白读了?
查看>>
你准备写代码到多少岁?程序员们是这么回答的!
查看>>
码农:和产品对一天需求,产品经理的需求是对完了,可我代码呢?
查看>>
程序员过年回家该怎么给亲戚朋友解释自己的职业?
查看>>
技术架构师的日常工作是什么?网友:搭框架,写公共方法?
查看>>
第四章 微信飞机大战
查看>>
九度:题目1008:最短路径问题
查看>>
九度Online Judge
查看>>
九度:题目1027:欧拉回路
查看>>
九度:题目1012:畅通工程
查看>>