Создать аларм программно

Ответить
Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Создать аларм программно

Сообщение powercat » 29 янв 2013, 18:44

Добавляется запись в базу - надо создать для нее свой аларм. Он будет получать данные из базы и слать нотифики.
Подскажите - как это сделать правильно, чтобы алармы не пересекались, т.к. они все будут обращаться к одному бродкасту для отправки нотифика?
И как это вообще сделать, что-то не могу сообразить действия ((?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Создать аларм программно

Сообщение neoksi » 29 янв 2013, 21:01

Присвоить каждому аларму уникальный URI, в котором содержится нужная информация.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Создать аларм программно

Сообщение powercat » 29 янв 2013, 22:24

кусочек кода плз, я знаю, у тебя есть )))

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Создать аларм программно

Сообщение neoksi » 30 янв 2013, 04:44

Ок. Соответствующую статью не нашел, опишу основные моменты.

1) Создаем в манифесте ресивер, способный принимать URI адреса:

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

        <receiver
            android:name=".MySuperAlarmReceiver"
            android:enabled="true"
            android:exported="false" >
            <intent-filter>
            	<data android:scheme="mysuperalarm" />
        	</intent-filter>
        </receiver>
Тут главная строка <data android:scheme="mysuperalarm" />, она задает какой тип URI принимает наш ресивер, у нас это к примеру "mysuperalarm://авторство/параметр 1/параметр 2/и т.д.". Тут главное придумать уникальное название для схемы.

2) Создаем нужные алармы с URI по нашей схеме:

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

	public void AddAlarmTicket(int _auth, long _param1, int _param2, long _param3, long _param4, long _param5, long _param5, long _param6){		
		Intent iAlarm = new Intent(this, MySuperAlarmReceiver.class);
		String suri="";
    		// Тип схемы
    		suri+="mysuperalarm://";
    		// Тип Аларма (параметр автора в URI)
    		suri+=Integer.toString(_auth)+"/";
    		// Параметр 1
    		suri+=Long.toString(_param1)+"/";
    		// Параметр 2
    		suri+=Integer.toString(_param2)+"/";
    		// Параметр 3
    		suri+=Long.toString(_param3)+"/";
    		// Параметр 4
    		suri+=Long.toString(_param4)+"/";
    		// Параметр 5
    		suri+=Long.toString(_param5)+"/";
    		// Параметр 6
    		suri+=Long.toString(_param6);	    		
    	Uri auri=Uri.parse(suri);	    		
		iAlarm.setData(auri);	    		
		PendingIntent pAlarm = PendingIntent.getBroadcast(this, 0, iAlarm, Intent.FLAG_GRANT_READ_URI_PERMISSION);
		if(_param6>=System.currentTimeMillis()){
			AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
			am.set(AlarmManager.RTC_WAKEUP, _param6, pAlarm);
			//Log.d("MyLog", "Add alarm "+suri);
    		        //Log.d("MyLog", "Start time "+_param6);
		}
	}
П.С. код выдернул из существующего проекта, чуть поменяв названия переменных.

3) Создаем ресивер, в котором первыми строками идет:

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

Uri auri = intent.getData(); // Получаем полный URI, который вызвал срабатывание ресивера
String elType = auri.getAuthority(); // Получаем тип аларма (авторство uri)
List<String> elAlarm=auri.getPathSegments(); // Получаем коллекцию параметров из URI
Далее делаем проверку параметров, и при необходимости, выводим Нотификейшин.
Последний раз редактировалось neoksi 30 янв 2013, 09:35, всего редактировалось 1 раз.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Создать аларм программно

Сообщение powercat » 30 янв 2013, 09:26

ого...сложно для меня, но буду изучать, данкс

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

Re: Создать аларм программно

Сообщение damager82 » 30 янв 2013, 15:34

В понедельник (04.02) как раз выйдет урок на эту тему
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Создать аларм программно

Сообщение powercat » 11 фев 2013, 11:36

neoksi писал(а):

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

Uri auri = intent.getData(); // Получаем полный URI, который вызвал срабатывание ресивера
String elType = auri.getAuthority(); // Получаем тип аларма (авторство uri)
List<String> elAlarm=auri.getPathSegments(); // Получаем коллекцию параметров из URI
А как обратиться потом к каждому элементу списка? т.е. скажем у меня есть URI мойури///элемент1/элемент2/элемент3/элемент4

Как обратиться к элементу списка, соответстующему элементу3 из ури?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Создать аларм программно

Сообщение neoksi » 11 фев 2013, 11:45

powercat писал(а):
neoksi писал(а):

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

Uri auri = intent.getData(); // Получаем полный URI, который вызвал срабатывание ресивера
String elType = auri.getAuthority(); // Получаем тип аларма (авторство uri)
List<String> elAlarm=auri.getPathSegments(); // Получаем коллекцию параметров из URI
А как обратиться потом к каждому элементу списка? т.е. скажем у меня есть URI мойури///элемент1/элемент2/элемент3/элемент4

Как обратиться к элементу списка, соответстующему элементу3 из ури?
elType == элемент1
elAlarm.get(0) == элемент2
elAlarm.get(1) == элемент3
elAlarm.get(2) == элемент4

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Создать аларм программно

Сообщение powercat » 11 фев 2013, 11:56

да, я что-то ступил )))

Ответить