Как проиграть системный звук?
Как проиграть системный звук?
В литературе описан пример, как проиграть файл в res/raw
А как проиграть системный звук?
Как эти звуки выбрать?
А как проиграть системный звук?
Как эти звуки выбрать?
Re: Как проиграть системный звук?
Можно так:
Код экрана:
Прога выведет список системных звуков и по нажатию воспроизведет.
В эмуляторе, возможно работать не будет, там мелодий нет.
Код: Выделить всё
public class MainActivity extends Activity {
ListView lvRing;
Ringtone ringtone;
RingtoneManager rm = new RingtoneManager(this);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// будем читать все типы звуков (звонок, будильник, уведомление) ...
rm.setType(RingtoneManager.TYPE_ALL);
// ... в курсор
Cursor cursor = rm.getCursor();
// создаем адаптер из курсора и настраиваем список ListView
SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(
getBaseContext(), android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1 });
lvRing = (ListView) findViewById(R.id.lvRing);
lvRing.setAdapter(scAdapter);
lvRing.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
// выбираем из курсора нужную мелодию
ringtone = rm.getRingtone(position);
// и играем ее
ringtone.play();
}
});
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/lvRing"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
В эмуляторе, возможно работать не будет, там мелодий нет.
Re: Как проиграть системный звук?
Все работает, большое спасибо!
Осталось только разобраться во всем этом. В частности мне надо:
1) запомнить выбраный звук, в переменной строкового типа
2) воспроизвести звук имея эту строковую переменную
3) где храняться все эти звуки? Это, если мне понадобиться добавить еще звуки.
Осталось только разобраться во всем этом. В частности мне надо:
1) запомнить выбраный звук, в переменной строкового типа
2) воспроизвести звук имея эту строковую переменную
3) где храняться все эти звуки? Это, если мне понадобиться добавить еще звуки.
Re: Как проиграть системный звук?
Oleg_SS писал(а):Все работает, большое спасибо!
Осталось только разобраться во всем этом. В частности мне надо:
1) запомнить выбраный звук, в переменной строкового типа
2) воспроизвести звук имея эту строковую переменную
3) где храняться все эти звуки? Это, если мне понадобиться добавить еще звуки.
- Стоит работать не со строковым значением, а сразу с переменной класса Ringtone, так будет гораздо проще.
- Тогда отпадает проблема с воспроизведением.
- В Андроиде все рингтоны лежат в папочке на SDкарте (/media/audio/notification, /media/audio/ringtones, /media/audio/alarms)
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Как проиграть системный звук?
Это маленькая чать большого проекта, в котором все настройки сохраняются в текстовом файле.RagnarR писал(а): [*] Стоит работать не со строковым значением, а сразу с переменной класса Ringtone, так будет гораздо проще.
[*] Тогда отпадает проблема с воспроизведением.
[*] В Андроиде все рингтоны лежат в папочке на SDкарте (/media/audio/notification, /media/audio/ringtones, /media/audio/alarms)[/list]
Поэтому возник вопрос пункта № 1
А разве нельзя по имени рингтона в lvRing найти его в списке rm (см. пример)
Если можно, то как? Очень надо.
Re: Как проиграть системный звук?
У меня на SD нет папки media
Создал рукми media/audio/alarms
Кинул туда файл .mp3
Программа из примера его не увидила.
Что то не так сделал?
Все нормально, надо было перегрузиться. В эмуляторе тоже работает
Создал рукми media/audio/alarms
Кинул туда файл .mp3
Программа из примера его не увидила.
Что то не так сделал?
Все нормально, надо было перегрузиться. В эмуляторе тоже работает
Re: Как проиграть системный звук?
Можно попытаться через запоминание позиции мелодии. У RingtoneManager есть метод getRingtone().Oleg_SS писал(а): Это маленькая чать большого проекта, в котором все настройки сохраняются в текстовом файле.
Поэтому возник вопрос пункта № 1
А разве нельзя по имени рингтона в lvRing найти его в списке rm (см. пример)
Если можно, то как? Очень надо.
Т.е. что-то вроде этого (параметр position берешь из настроек):
Код: Выделить всё
Ringtone ringtone;
RingtoneManager rm = new RingtoneManager(this);
rm.setType(RingtoneManager.TYPE_ALL);
ringtone = rm.getRingtone(position);
ringtone.play();
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Как проиграть системный звук?
Так не получится. Если добавить звук, то позиция поменяется.RagnarR писал(а):Можно попытаться через запоминание позиции мелодии. У RingtoneManager есть метод getRingtone().
Т.е. что-то вроде этого (параметр position берешь из настроек):
Re: Как проиграть системный звук?
Тогда работа с курсором. Создаешь курсор из рингтонов, в цикле пробегаешь по каждому и сверяешь названия, необходимый запускаешь.Oleg_SS писал(а): Так не получится. Если добавить звук, то позиция поменяется.
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Как проиграть системный звук?
может есть поиск по имени?RagnarR писал(а):Тогда работа с курсором. Создаешь курсор из рингтонов, в цикле пробегаешь по каждому и сверяешь названия, необходимый запускаешь.Oleg_SS писал(а): Так не получится. Если добавить звук, то позиция поменяется.
можно пример цикла?
к сожалению c java работаю в первый раз, не говоря об андроиде.
Re: Как проиграть системный звук?
Ясно. Попробуй такой вариант:
Код: Выделить всё
Ringtone ringtone;
RingtoneManager rm = new RingtoneManager(this);
rm.setType(RingtoneManager.TYPE_ALL);
Cursor cursor = rm.getCursor();
cursor.moveToFirst();
try{
while (cursor.isAfterLast() == false){
int index = getColumnIndex("title");
if ( cursor.getString(index).equal(your_song_name) ) {
ringtone = rm.getRingtone(cursor.getPosition());
ringtone.play();
}
}
} finally {
cursor.close();
}
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Как проиграть системный звук?
мои исследования курсора показали, что там есть content и title_key
может это то что мне надо?
можно по этим двум параметрам запустить звук?
может это то что мне надо?
можно по этим двум параметрам запустить звук?
Re: Как проиграть системный звук?
Я так понимаю, что title_key - это название, а content - это сама мелодия.Oleg_SS писал(а):мои исследования курсора показали, что там есть content и title_key
может это то что мне надо?
можно по этим двум параметрам запустить звук?
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.
Re: Как проиграть системный звук?
title_key - какая-то абракадабра (может в другой кодеровке название файла?)RagnarR писал(а):Я так понимаю, что title_key - это название, а content - это сама мелодия.
content - путь к папке (без указания файла)
как бы это не было перебор всего курсора получился. Если ничего более красивого не получится, остановлюсь на этом варианте. Правда у него есть один недостаток. Дело в том, что title, это тег в файле, который может повторяться в разных файлах. Т.е. может быть ситуация, когда в разных файлах одинаковый тег. Тогда в списке мы увидим две одинаковые записи, указывающие на разные звуки.
Спасибо большое за помощь.
Re: Как проиграть системный звук?
["damager82"] в приведенном вами примере не могу поменять шрифт в lvRing (размер, цвет). Пытаюсь менять в main.xml
Подозреваю, что шрифт зависит от этой строки:
SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(
getBaseContext(), android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1 });
Как управлять шрифтом в этом случае?
Подозреваю, что шрифт зависит от этой строки:
SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(
getBaseContext(), android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1 });
Как управлять шрифтом в этом случае?
Re: Как проиграть системный звук?
Верно. Вы говорите адаптеру, чтобы он для отображения пунктов использовал layout-ресурс android.R.layout.simple_list_item_1, а данные вставлял в TextView с ID = android.R.id.text1. Вам просто надо нарисовать свой layout-ресурс и в нем настроить свой TextView и указать их адаптеру.Oleg_SS писал(а): Подозреваю, что шрифт зависит от этой строки:
SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(
getBaseContext(), android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1 });
Re: Как проиграть системный звук?
Для меня это пока еще слишком сложно. Пошел по более простому пути. Простому в смысле понимания. У меня надо заполнить не лист, а спиннер. В цикле перебираю все записи курсора и добавляю в адаптер. А потом подключаю адаптер к спинеру.damager82 писал(а): Вам просто надо нарисовать свой layout-ресурс и в нем настроить свой TextView и указать их адаптеру.
Буду благодарен, если вы приведете пример вашего варианта применительно к лист и спиннеру.
Re: Как проиграть системный звук?
Вы можете на сайте глянуть уроки 40-42. Там я показываю схему, как работает список и использую свой layout-файл.
Re: Как проиграть системный звук?
подскажите где почитать по RingtoneManager?
в инете не могу найти информацию
в инете не могу найти информацию