Android 闹钟 开发过程记录(六)
来源:互联网 发布:崩坏学园2淘宝代充 编辑:程序博客网 时间:2024/04/30 09:08
闹钟铃声选择,使用了 TabHost 分了三个activity,分别是 1.应用raw文件下自带的音频文件。 2.手机系统自带的闹铃音频文件。 3.录音文件。
目的是要将音频的名称和时长获取出来显示在listview中。
获取raw文件中音频的名称和时长的方式如下:
Field[] fields = R.raw.class.getDeclaredFields();int rawId;String rawName;for (int i = 0; i < fields.length; i++) {try {rawId = fields[i].getInt(R.raw.class);rawName = fields[i].getName();Log.i(TAG, "-----------rawId="+rawId+"----------");Uri uri = Uri.parse("android.resource://"+this.getPackageName()+"/"+ rawId);mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(this, uri);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.prepare();int duration = mediaPlayer.getDuration();audioInfo = new AlarmClockAudioInfo(rawName, RingTextUtil.showAudioTime(duration), uri);} catch (Exception e) {e.printStackTrace();} mediaPlayer =null;audioInfos.add(audioInfo);}fields = null;
获取系统音频文件的名称和时长的方法如下:
Uri uri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;Cursor cursor = resolver.query(uri, new String[]{"_data", "title","duration"}, "is_alarm = 1", null, null);while (cursor.moveToNext()){String audioPath = cursor.getString(0);String ringName = cursor.getString(1);int ringDuration = cursor.getInt(2);audioInfo = new AlarmClockAudioInfo(ringName, RingTextUtil.showAudioTime(ringDuration), Uri.parse(audioPath));audioInfos.add(audioInfo);}cursor.close();
获取录音文件的名称和时长的方法如下:
我是这样设计的:如果有sd卡,则保存在sd卡上指定的文件夹中,如果没有,就保存在应用的files文件下。
/** * 获取录音的铃声信息 * @return 录音的铃声信息的集合 */private List<AlarmClockAudioInfo> getAudioInfos() {audioInfos = new ArrayList<AlarmClockAudioInfo>();//获取sd卡上的录音boolean isSDCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在 if(isSDCardExist){File SDFileDir = new File(Environment.getExternalStorageDirectory()+"/cardhelper/record");List<AlarmClockAudioInfo> SDRecordFiles = getRecordFiles(SDFileDir);if(SDRecordFiles != null){for (AlarmClockAudioInfo alarmClockAudioInfo : SDRecordFiles) {audioInfos.add(alarmClockAudioInfo);}}}//获取保存在应用文件中的录音File filesDir = this.getFilesDir();List<AlarmClockAudioInfo> RecordFiles = getRecordFiles(filesDir);if(RecordFiles != null){for (AlarmClockAudioInfo alarmClockAudioInfo : RecordFiles) {audioInfos.add(alarmClockAudioInfo);}}return audioInfos;}/** * 获取指定目录下的录音铃声信息 * @param fileDir * @return 录音铃声信息的集合 */private List<AlarmClockAudioInfo> getRecordFiles(File fileDir){List<AlarmClockAudioInfo> RecordAudioInfos = new ArrayList<AlarmClockAudioInfo>();if(fileDir.exists()){File[] records = fileDir.listFiles();if(records != null){for (File record : records) {AlarmClockAudioInfo audioInfo = null;try{String recordName = record.getName();//如果用split(".")[0] 会报数组角标越界异常 如同见鬼一样令人费解recordName = recordName.substring(0, recordName.lastIndexOf("."));Uri uri = Uri.parse(record.getPath());mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(AlarmClockChooseRingsRecordActivity.this, uri);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.prepare();int duration = mediaPlayer.getDuration();audioInfo = new AlarmClockAudioInfo(recordName, RingTextUtil.showAudioTime(duration), uri);}catch(Exception e){e.printStackTrace();}mediaPlayer =null;RecordAudioInfos.add(audioInfo);}}}return RecordAudioInfos;}
0 0
- Android 闹钟 开发过程记录(六)
- Android 闹钟 开发过程记录(一)
- Android 闹钟 开发过程记录(二)
- Android 闹钟 开发过程记录(三)
- Android 闹钟 开发过程记录(四)
- Android 闹钟 开发过程记录(五)
- Android 闹钟 开发过程记录(七)
- Android:Moring-早安闹钟开发过程记录(一)
- Android:Moring-早安闹钟开发过程记录(二)
- Android:Moring-早安闹钟开发过程记录(三)
- Android:Moring-早安闹钟开发过程记录(四)
- Android 手机影音 开发过程记录(六)
- android 实用闹钟开发过程记(一)--创建数据库
- android 实用闹钟开发过程记(一)--创建数据库
- Android闹钟开发问题点记录
- android 实用闹钟开发过程记(二)--sqlite数据库的操作
- android 实用闹钟开发过程记(二)--sqlite数据库的操作
- android闹钟开发
- 大型网站技术架构:核心原理与案例分析-李智慧
- (转)详解汇编系统调用过程(以printf为例)
- cocos2d-x3.2单点触摸
- c语言危险库函数及解决方案
- poj解题报告——2081
- Android 闹钟 开发过程记录(六)
- Cocos2d-x3.2实现虚拟摇杆多点触摸
- 【javascript】弹出新窗口
- 汇编语言学习系列 函数实现
- Java编程基础:栈&堆
- android中三种animation使用及源码分view
- WINDOW2008R2、WINDOW2012系统出现Comsurrogate错误
- App欢迎界面的制作(UIScrollView实现)
- Cocos2d-x 3.2 Menu菜单的创建