Как проиграть системный звук?

Ответить
Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Как проиграть системный звук?

Сообщение Oleg_SS » 11 янв 2012, 11:34

В литературе описан пример, как проиграть файл в res/raw
А как проиграть системный звук?
Как эти звуки выбрать?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Как проиграть системный звук?

Сообщение damager82 » 12 янв 2012, 01:09

Можно так:

Код: Выделить всё

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>
Прога выведет список системных звуков и по нажатию воспроизведет.
В эмуляторе, возможно работать не будет, там мелодий нет.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 07:57

Все работает, большое спасибо!
Осталось только разобраться во всем этом. В частности мне надо:
1) запомнить выбраный звук, в переменной строкового типа
2) воспроизвести звук имея эту строковую переменную
3) где храняться все эти звуки? Это, если мне понадобиться добавить еще звуки.

Аватара пользователя
RagnarR
Сообщения: 29
Зарегистрирован: 11 янв 2012, 11:02
Откуда: Belarus

Re: Как проиграть системный звук?

Сообщение RagnarR » 12 янв 2012, 09:19

Oleg_SS писал(а):Все работает, большое спасибо!
Осталось только разобраться во всем этом. В частности мне надо:
1) запомнить выбраный звук, в переменной строкового типа
2) воспроизвести звук имея эту строковую переменную
3) где храняться все эти звуки? Это, если мне понадобиться добавить еще звуки.
  1. Стоит работать не со строковым значением, а сразу с переменной класса Ringtone, так будет гораздо проще.
  2. Тогда отпадает проблема с воспроизведением.
  3. В Андроиде все рингтоны лежат в папочке на SDкарте (/media/audio/notification, /media/audio/ringtones, /media/audio/alarms)
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 10:11

RagnarR писал(а): [*] Стоит работать не со строковым значением, а сразу с переменной класса Ringtone, так будет гораздо проще.
[*] Тогда отпадает проблема с воспроизведением.
[*] В Андроиде все рингтоны лежат в папочке на SDкарте (/media/audio/notification, /media/audio/ringtones, /media/audio/alarms)[/list]
Это маленькая чать большого проекта, в котором все настройки сохраняются в текстовом файле.
Поэтому возник вопрос пункта № 1
А разве нельзя по имени рингтона в lvRing найти его в списке rm (см. пример)
Если можно, то как? Очень надо.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 11:00

У меня на SD нет папки media
Создал рукми media/audio/alarms
Кинул туда файл .mp3
Программа из примера его не увидила.
Что то не так сделал?

Все нормально, надо было перегрузиться. В эмуляторе тоже работает :)

Аватара пользователя
RagnarR
Сообщения: 29
Зарегистрирован: 11 янв 2012, 11:02
Откуда: Belarus

Re: Как проиграть системный звук?

Сообщение RagnarR » 12 янв 2012, 11:32

Oleg_SS писал(а): Это маленькая чать большого проекта, в котором все настройки сохраняются в текстовом файле.
Поэтому возник вопрос пункта № 1
А разве нельзя по имени рингтона в lvRing найти его в списке rm (см. пример)
Если можно, то как? Очень надо.
Можно попытаться через запоминание позиции мелодии. У RingtoneManager есть метод getRingtone().
Т.е. что-то вроде этого (параметр position берешь из настроек):

Код: Выделить всё

Ringtone ringtone;
RingtoneManager rm = new RingtoneManager(this);

rm.setType(RingtoneManager.TYPE_ALL);
ringtone = rm.getRingtone(position);

ringtone.play();
Собственно в первом ответе все есть :)
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 12:17

RagnarR писал(а):Можно попытаться через запоминание позиции мелодии. У RingtoneManager есть метод getRingtone().
Т.е. что-то вроде этого (параметр position берешь из настроек):
Так не получится. Если добавить звук, то позиция поменяется.

Аватара пользователя
RagnarR
Сообщения: 29
Зарегистрирован: 11 янв 2012, 11:02
Откуда: Belarus

Re: Как проиграть системный звук?

Сообщение RagnarR » 12 янв 2012, 12:21

Oleg_SS писал(а): Так не получится. Если добавить звук, то позиция поменяется.
Тогда работа с курсором. Создаешь курсор из рингтонов, в цикле пробегаешь по каждому и сверяешь названия, необходимый запускаешь.
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 13:12

RagnarR писал(а):
Oleg_SS писал(а): Так не получится. Если добавить звук, то позиция поменяется.
Тогда работа с курсором. Создаешь курсор из рингтонов, в цикле пробегаешь по каждому и сверяешь названия, необходимый запускаешь.
может есть поиск по имени?
можно пример цикла?
к сожалению c java работаю в первый раз, не говоря об андроиде.

Аватара пользователя
RagnarR
Сообщения: 29
Зарегистрирован: 11 янв 2012, 11:02
Откуда: Belarus

Re: Как проиграть системный звук?

Сообщение RagnarR » 12 янв 2012, 13:39

Ясно. Попробуй такой вариант:

Код: Выделить всё

   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();
   }
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 13:45

мои исследования курсора показали, что там есть content и title_key
может это то что мне надо?
можно по этим двум параметрам запустить звук?

Аватара пользователя
RagnarR
Сообщения: 29
Зарегистрирован: 11 янв 2012, 11:02
Откуда: Belarus

Re: Как проиграть системный звук?

Сообщение RagnarR » 12 янв 2012, 13:50

Oleg_SS писал(а):мои исследования курсора показали, что там есть content и title_key
может это то что мне надо?
можно по этим двум параметрам запустить звук?
Я так понимаю, что title_key - это название, а content - это сама мелодия.
--[+++++++<---->>-->+>+>+<<<<]
<.>++++[-<++++<++>>>->--<<]>>-.>--..>+.<<<.<<-.>>+>->>.+++[.<]<<++.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 12 янв 2012, 15:00

RagnarR писал(а):Я так понимаю, что title_key - это название, а content - это сама мелодия.
title_key - какая-то абракадабра (может в другой кодеровке название файла?)
content - путь к папке (без указания файла)

как бы это не было перебор всего курсора получился. Если ничего более красивого не получится, остановлюсь на этом варианте. Правда у него есть один недостаток. Дело в том, что title, это тег в файле, который может повторяться в разных файлах. Т.е. может быть ситуация, когда в разных файлах одинаковый тег. Тогда в списке мы увидим две одинаковые записи, указывающие на разные звуки.

Спасибо большое за помощь.

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 15 янв 2012, 19:07

["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 });

Как управлять шрифтом в этом случае?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Как проиграть системный звук?

Сообщение damager82 » 15 янв 2012, 22:58

Oleg_SS писал(а): Подозреваю, что шрифт зависит от этой строки:

SimpleCursorAdapter scAdapter = new SimpleCursorAdapter(
getBaseContext(), android.R.layout.simple_list_item_1, cursor,
new String[] { "title" }, new int[] { android.R.id.text1 });
Верно. Вы говорите адаптеру, чтобы он для отображения пунктов использовал layout-ресурс android.R.layout.simple_list_item_1, а данные вставлял в TextView с ID = android.R.id.text1. Вам просто надо нарисовать свой layout-ресурс и в нем настроить свой TextView и указать их адаптеру.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Oleg_SS
Сообщения: 34
Зарегистрирован: 11 янв 2012, 10:59

Re: Как проиграть системный звук?

Сообщение Oleg_SS » 16 янв 2012, 05:57

damager82 писал(а): Вам просто надо нарисовать свой layout-ресурс и в нем настроить свой TextView и указать их адаптеру.
Для меня это пока еще слишком сложно. Пошел по более простому пути. Простому в смысле понимания. У меня надо заполнить не лист, а спиннер. В цикле перебираю все записи курсора и добавляю в адаптер. А потом подключаю адаптер к спинеру.
Буду благодарен, если вы приведете пример вашего варианта применительно к лист и спиннеру.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Как проиграть системный звук?

Сообщение damager82 » 16 янв 2012, 09:16

Вы можете на сайте глянуть уроки 40-42. Там я показываю схему, как работает список и использую свой layout-файл.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Как проиграть системный звук?

Сообщение grem17 » 22 сен 2014, 05:43

подскажите где почитать по RingtoneManager?
в инете не могу найти информацию

Ответить