使用Ringtone Manager避免android中的系统铃声

使用Ringtone Manager避免android中的系统铃声,android,Android,我正在使用RingtoneManager获取铃声,它会返回包括系统铃声在内的所有铃声。如何仅获取存储在sd卡上且不是系统默认铃声的铃声 这是我的铃声提取器类的代码 public class RingtoneHelper { public static List<Ringtone> fetchAvailableRingtones(Context context){ List<Ringtone> ringtones = new ArrayList&

我正在使用
RingtoneManager
获取铃声,它会返回包括系统铃声在内的所有铃声。如何仅获取存储在sd卡上且不是系统默认铃声的铃声

这是我的铃声提取器类的代码

public class RingtoneHelper {

    public static List<Ringtone> fetchAvailableRingtones(Context context){

        List<Ringtone> ringtones = new ArrayList<>();
        RingtoneManager mgr = new RingtoneManager(context);
        mgr.setType(RingtoneManager.TYPE_RINGTONE);

        int n = mgr.getCursor().getCount();
        for(int i=0;i<n;i++){
            ringtones.add(mgr.getRingtone(i));
        }

        return  ringtones;
    }

    public static void changeRingtone(Context context){

        SharedPreferences preferences = context.getSharedPreferences("randomizer", Context.MODE_PRIVATE);
        if(!preferences.getBoolean("active", false))
            return;

        RingtoneManager mgr = new RingtoneManager(context);
        Random random = new Random(System.currentTimeMillis());

        int n = random.nextInt(mgr.getCursor().getCount());

        RingtoneManager.setActualDefaultRingtoneUri(context,
                RingtoneManager.TYPE_RINGTONE, mgr.getRingtoneUri(n));
    }
}
公共类铃声帮助器{
公共静态列表fetchAvailableRingtones(上下文){
列表铃声=新的ArrayList();
RingtoneManager mgr=新的RingtoneManager(上下文);
经理设置类型(铃声管理器类型\铃声);
int n=mgr.getCursor().getCount();
对于(int i=0;i