零一生随机,随机生万物
https://github.com/mlxy/RandomRingtones
在每次来电的时候随机修改铃声。
结果就是每次来电的铃声都不一样。
给S1er写的。
几个知识点:
1. File类里有个listFiles方法,这个玩意在学Python的时候明明一开始就用到了不知道为什么我现在才第一次用。方法接收一个FilenameFilter参数,直接用匿名类填进去,然后重写accept方法这个知识点简直弱智到不能自理我为什么要单独把它写出来。嗯,就是自己写个过滤器我还是不接着说了吧。
2. 修改系统铃声的问题,直接看代码。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public static void setRingtone(Context context, File ringtoneFile) { 2 // 铃声的属性。 3 ContentValues values = new ContentValues(); 4 values.put(MediaStore.MediaColumns.DATA, ringtoneFile.getAbsolutePath()); 5 values.put(MediaStore.MediaColumns.TITLE, ringtoneFile.getName()); 6 values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); 7 values.put(MediaStore.Audio.Media.ARTIST, " "); 8 values.put(MediaStore.MediaColumns.SIZE, ringtoneFile.getUsableSpace()); 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 // 从媒体库中删除并重新插入。 15 Uri uri = MediaStore.Audio.Media.getContentUriForPath(ringtoneFile.getAbsolutePath()); 16 context.getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + ringtoneFile.getAbsolutePath() + "\"", null); 17 Uri newUri = context.getContentResolver().insert(uri, values); 18 19 // 设置新铃声。 20 RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri); 21 }
看着现成的代码对着改挺简单的,要自己重写就难了。所以记一下还是挺有必要的。
MimeType后面改成星号应该能支持更多的音频类型,但是要自己一个一个测,干脆就只让用MP3了。
艺术家随便填。
第二步中首先把铃声从媒体库中删除的一步挺重要的,网上很多代码没有这一行,我之前测试的时候没这行就不能用。
剩下的就都是API调用。
我觉得还是不要硬背,用得到的时候再现查吧。
3. 从Android3.1之后,用户手动强制停止的应用状态和刚安装还没打开时一样,所以广播接收器也失效了。我暂时没想出解决办法,不知道那些大流氓是怎么驻留后台的。
之后再手绘一个图标上去。