1.將String 路徑解析成Uri的方法:
public Uri queryUriforAudio(String path)
{
File file = new File(path);
Log.i("TEST","-------->path: "+path);
final String where = MediaStore.Audio.Media.DATA + "='"+file.getAbsolutePath()+"'";
Cursor cursor = this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, where, null, null);
if (cursor == null) {
Log.d("uritest", "queryUriforAudio: uri爲空 1");
return null;
}
int id = -1;
if (cursor != null) {
cursor.moveToFirst();
if (!cursor.isAfterLast()) {
id = cursor.getInt(0);
}
cursor.close();
}
if(id==-1)
{
Log.d("uritest", "queryUriforAudio: uri爲空 2");
return null;
}
return Uri.withAppendedPath(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, String.valueOf(id));
}
2.播放音頻:
/**
* play default notification sound
*
* @return MediaPlayer object
*/
@Override
public void playNotificationSound() {
uriMedia = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
ringMedia = RingtoneManager.getRingtone(context, uriMedia);
ringMedia.play();
}
/**
* play default ring sound
*
* @return MediaPlayer object
*/
@Override
public void playDefaultRingSound() {
uriCallMedia = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
ringCallMedia = RingtoneManager.getRingtone(context, uriCallMedia);
ringCallMedia.play();
}
/**
* play specific ring sound
*
* @return MediaPlayer object
*/
@Override
public void playRingSound(Uri ringtongUri,int duratoinMs) {
cancelTimer();
mTimer = new Timer();
initialTimer(duratoinMs);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(context,ringtongUri);
mediaPlayer.prepare();
mediaPlayer.setLooping(true);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
isPlaying = true;
}
/**
* play default alarm sound
*
* @return MediaPlayer object
*/
@Override
public void playDefaultAlarmSound() {
uriAlarmMedia = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
ringAlarmMedia = RingtoneManager.getRingtone(context, uriAlarmMedia);
ringAlarmMedia.play();
}
/**
* play specific alarm sound
*
* @return MediaPlayer object
*/
@Override
public void playAlarmSound(Uri ringtongUri,int duratoinMs){
cancelTimer();
mTimer = new Timer();
initialTimer(duratoinMs);
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(context,ringtongUri);
mediaPlayer.prepare();
mediaPlayer.setLooping(true);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
}
/**
* stop notification sound
*/
@Override
public void stopNotificationSound() {
if (ringMedia != null) {
ringMedia.stop();
}
}
/**
* stop ring sound
*/
@Override
public void stopDefaultRingSound() {
if (ringCallMedia != null) {
ringCallMedia.stop();
}
}
/**
* stop alarm sound
*/
@Override
public void stopDefaultAlarmSound() {
if (ringAlarmMedia != null) {
ringAlarmMedia.stop();
}
}