Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 铃声参考来自原始资源的自定义铃声_Java_Android_Resources_Preference_Ringtone - Fatal编程技术网

Java 铃声参考来自原始资源的自定义铃声

Java 铃声参考来自原始资源的自定义铃声,java,android,resources,preference,ringtone,Java,Android,Resources,Preference,Ringtone,目前,我只是使用复选框首选项来激活/禁用声音。声音是从原始资源播放的 现在我想用RingtonePreference替换这个复选框首选项,但是我的资源中的自定义声音应该是默认的,并且可以从RingtonePreference中选择 我该怎么做呢?我写了一个适合我需要的偏好类,这里可能会帮助其他人: public class SoundPreference extends ListPreference implements PreferenceManager.OnActi

目前,我只是使用复选框首选项来激活/禁用声音。声音是从原始资源播放的

现在我想用RingtonePreference替换这个复选框首选项,但是我的资源中的自定义声音应该是默认的,并且可以从RingtonePreference中选择


我该怎么做呢?

我写了一个适合我需要的偏好类,这里可能会帮助其他人:

 public class SoundPreference extends ListPreference implements
            PreferenceManager.OnActivityResultListener, OnPreferenceChangeListener {

    private NotificationPrefs mAct;

    public SoundPreference(NotificationPrefs act) {
            super(act);
            mAct = act;
            setEntries(new String[] { "Silent",
                            "Custom",
                           "Picker" });
            setEntryValues(new String[] { "silent", "custom", "picker" });

            setOnPreferenceChangeListener(this);
    }

    @Override
    public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
            if (data != null) {
                    Uri uri = data
                                    .getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
                    if (uri != null) {
                            persistString(uri.toString());
                            return true;
                    }
            }
            return false;
    }

    @Override
    public void setValue(String value) {

            List<CharSequence> vals = new ArrayList<CharSequence>(
                            Arrays.asList(getEntryValues()));
            if (!vals.contains(value)) {
                    List<CharSequence> ents = new ArrayList<CharSequence>(
                                    Arrays.asList(getEntries()));
                    Ringtone r = RingtoneManager.getRingtone(getContext(),
                                    Uri.parse(value));
                    String name = r.getTitle(getContext());
                    vals.add(value);
                    ents.add(name);

                    this.setEntries(ents.toArray(new CharSequence[ents.size()]));
                    this.setEntryValues(vals.toArray(new CharSequence[vals.size()]));

            }
            super.setValue(value);
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
            if ("picker".equals(newValue)) {

                    Intent i = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                    i.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
                    i.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
                    Intent chooserIntent = Intent.createChooser(i, getContext()
                                    .getString(R.string.sound));
                    mAct.startActivityForResult(chooserIntent, 0);
                    mAct.setActivityResultListener(this);
                    return false;
            }

            return true;

    }
 }
公共类SoundPreference扩展了ListPreference实现
PreferenceManager.OnActivityResultListener,OnPreferenceChangeListener{
私人通知优先权;
公共声音优先权(通知优先权法案){
超级(法案);
mAct=act;
setEntries(新字符串[]{“无提示”,
“习俗”,
“选择器”});
setEntryValues(新字符串[]{“静默”、“自定义”、“选取器”});
setOnPreferenceChangeListener(此);
}
@凌驾
公共布尔onActivityResult(int请求代码、int结果代码、意图数据){
如果(数据!=null){
Uri=数据
.getParcelableExtra(铃声管理器.EXTRA\u RINGTONE\u PICKED\u URI);
if(uri!=null){
persistString(uri.toString());
返回true;
}
}
返回false;
}
@凌驾
公共void设置值(字符串值){
List VAL=新阵列列表(
asList(getEntryValues());
如果(!vals.contains(value)){
List ents=新阵列列表(
asList(getEntries());
Ringtone r=RingtoneManager.getRingtone(getContext(),
parse(value));
字符串名称=r.getTitle(getContext());
增值税;
添加(名称);
this.setEntries(ents.toArray(新的字符序列[ents.size()]);
this.setEntryValues(vals.toArray(新的字符序列[vals.size()]);
}
super.setValue(值);
}
@凌驾
公共布尔onPreferenceChange(首选项首选项,对象newValue){
如果(“选择器”。等于(新值)){
意向i=新意向(铃声管理器、操作、铃声选择器);
i、 putExtra(RingtoneManager.EXTRA\u RINGTONE\u SHOW\u DEFAULT,false);
i、 putExtra(RingtoneManager.EXTRA\u RINGTONE\u SHOW\u SILENT,false);
Intent-chooserint=Intent.createChooser(i,getContext())
.getString(R.string.sound));
mAct.startActivityForResult(选择内容,0);
mAct.setActivityResultListener(此);
返回false;
}
返回true;
}
}

请参见什么是通知Prefs?