You can use RingtoneManager to set the type and obtain the Ringtone object. Or its Uri.
Ringtone can be played directly.
Java code
Public Ringtone getDefaultRingtone (int type ){
Return RingtoneManager. getRingtone (mContext, RingtoneManager. getActualDefaultRingtoneUri (mContext, type ));
}
Public Uri getDefaultRingtoneUri (int type ){
Return RingtoneManager. getActualDefaultRingtoneUri (mContext, type );
}
Public List <Ringtone> getRingtoneList (int type ){
List <Ringtone> resArr = new ArrayList <Ringtone> ();
RingtoneManager manager = new RingtoneManager (mContext );
Manager. setType (type );
Cursor cursor = manager. getCursor ();
Int count = cursor. getCount ();
For (int I = 0; I <count; I ++ ){
ResArr. add (manager. getRingtone (I ));
}
Return resArr;
}
Public Ringtone getRingtone (int type, int pos ){
RingtoneManager manager = new RingtoneManager (mContext );
Manager. setType (type );
Return manager. getRingtone (pos );
}
Public List <String> getRingtoneTitleList (int type ){
List <String> resArr = new ArrayList <String> ();
RingtoneManager manager = new RingtoneManager (mContext );
Manager. setType (type );
Cursor cursor = manager. getCursor ();
If (cursor. moveToFirst ()){
Do {
ResArr. add (cursor. getString (RingtoneManager. TITLE_COLUMN_INDEX ));
} While (cursor. moveToNext ());
}
Return resArr;
}
Public String getRingtoneUriPath (int type, int pos, String def ){
RingtoneManager manager = new RingtoneManager (mContext );
Manager. setType (type );
Uri uri = manager. getRingtoneUri (pos );
Return uri = null? Def: uri. toString ();
}
Public Ringtone getRingtoneByUriPath (int type, String uriPath ){
RingtoneManager manager = new RingtoneManager (mContext );
Manager. setType (type );
Uri uri = Uri. parse (uriPath );
Return manager. getRingtone (mContext, uri );
}