Хорошо, первым шагом было бы позволить пользователю выбрать мелодию звонка, которую он хочет. Я помогу вам реализовать действие, которое выводит список доступных мелодий звонка и позволяет пользователю выбрать один из них. Естественно, эта активность является ListActivity.
Прежде всего создайте контейнер для рингтона. Я назвал его RingtoneObject, и он содержит имя рингтона вместе с uri рингтона:
private static final class RingtoneObject {
private String name;
private Uri uri;
public RingtoneObject(String name, Uri uri) {
this.name = name;
this.uri = uri;
}
@Override
public String toString() {
return name==null?"":name.toString();
}
}
В onCreate вы должны запросить у RingtoneManager доступные мелодии, а затем перебрать их и добавить в список типа RingtoneObject. Код для этого прост:
ArrayAdapter<RingtoneObject> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RingtoneManager ringtoneMgr = new RingtoneManager(this);
ringtoneMgr.setType(RingtoneManager.TYPE_ALARM);
Cursor alarmsCursor = ringtoneMgr.getCursor();
int alarmsCount = alarmsCursor.getCount();
RingtoneObject[] alarms = new RingtoneObject[alarmsCount];
int index = 0;
while(alarmsCursor.moveToNext()) {
alarms[index] = new RingtoneObject(ringtoneMgr.getRingtone(index).getTitle(this), ringtoneMgr.getRingtoneUri(index));
index++;
}
alarmsCursor.close();
adapter = new ArrayAdapter<MainActivity.RingtoneObject>(this, android.R.layout.simple_list_item_1, alarms);
setListAdapter(adapter);
getListView().setOnItemClickListener(this);
}
Вы можете заметить, что область действия адаптера выходит за пределы функции onCreate. Мне нужна ссылка на него в обратном вызове OnItemClickListener. Вы также можете заметить, что я установил для OnItemClickListener представления списка значение this, которое в данном контексте является самой активностью. Поэтому действие должно реализовывать OnItemClickListener
и при нажатии элемента: я просто воспроизводил рингтон.
MediaPlayer md;
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if(md != null) {
if(md.isPlaying())
md.stop();
md = null;
}
md = MediaPlayer.create(this, adapter.getItem(position).uri);
md.start();
}
Опять же, MediaPlayer
не работает, потому что мне нужна ссылка всякий раз, когда я хочу остановить воспроизведение.
В любом случае, в вашей собственной функции onItemClick или каком-либо другом механизме, который вы предоставляете пользователю для выбора мелодии звонка, вам нужно будет сохранить Uri мелодии звонка в каком-либо постоянном хранилище (например, SharedPreferences), а затем, когда вы хотите показать уведомление , используйте сохраненный uri.
Примечание. Вы можете сохранить uri в виде строки, используя theUri.toString()
, загрузить эту строку и преобразовать ее обратно в Uri, используя Uri.parse(theString)
.
Вот полный образец (для выбора uri).
person
Sherif elKhatib
schedule
11.09.2013