Урок 120. Виджеты. Обработка нажатий

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

Урок 120. Виджеты. Обработка нажатий

Сообщение damager82 » 12 фев 2013, 23:00

В этом уроке:
- обрабатываем нажатия на виджет


Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:43, всего редактировалось 3 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

trololo1
Сообщения: 10
Зарегистрирован: 26 дек 2012, 11:37

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение trololo1 » 16 фев 2013, 20:50

Добрый вечер. у меня в схожем приложении следующая ошибка возникает.
после звонка по телефону перестают работаеть клики по виджету до следующего автоматического апдейта onupdate. с чем это может быть связано?

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

Re: Урок 120. Виджеты. Обработка нажатий

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

trololo1
По моему субъективному мнению, сбрасывается значение PendingIntent у лаунчера. Но надо смотреть код. А в виджетах от других программ, тоже такое происходит?

damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?

trololo1
Сообщения: 10
Зарегистрирован: 26 дек 2012, 11:37

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение trololo1 » 17 фев 2013, 17:11

neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.

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

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение neoksi » 18 фев 2013, 02:34

trololo1 писал(а):neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
При любой перерисовке remoteviews, лучше все инициализировать заново.

trololo1
Сообщения: 10
Зарегистрирован: 26 дек 2012, 11:37

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение trololo1 » 19 фев 2013, 18:50

neoksi писал(а):
trololo1 писал(а):neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
При любой перерисовке remoteviews, лучше все инициализировать заново.
да . походу дела, это единственный вариант правильной инициализации.

tserg
Сообщения: 4
Зарегистрирован: 18 фев 2013, 11:06

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение tserg » 21 фев 2013, 17:39

Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение beeline09 » 21 фев 2013, 21:30

Наконец-то дождался я темы про виджеты))) Спасибо большое автору!
Ну а теперь по делу...
Вот создал я виджет по уроку, а теперь хочу модифицировать следующим образом. Есть код, который читает команду из ответа sh. Не знаю на сколько правильно выразился.:

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

 public void terminal(String[] cmd) throws IOException {
	    
	    p = Runtime.getRuntime().exec(cmd);
		DataOutputStream os = new DataOutputStream(p.getOutputStream());
		for (String tmpCmd : cmd) {
			os.writeBytes(tmpCmd + "\n");
		}
		String strL;
		String strL1;
		
		
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					p.getInputStream()));
		
			
			while ((strL = reader.readLine()) != null) {
				strL1=strL;

			}	
		
		
		os.writeBytes("exit\n");
		os.flush();
  }
Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.

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

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение damager82 » 28 фев 2013, 14:15

neoksi писал(а):damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?
1) Там целый абзац посвящен этому.
Вы обратили внимание, что при создании PendingIntent мы использовали ID экземпляров виджета в качестве requestCode? Поясняю, зачем это сделано...
и т.д.

2) А зачем? В моем случае в этом нет необходимости.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

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

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение damager82 » 28 фев 2013, 14:18

beeline09 писал(а):Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.
Кладите значение в preference, а виджетом читайте. Или я не понял вопрос.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

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

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение damager82 » 28 фев 2013, 14:21

tserg писал(а):Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?
Хороший вопрос. Я пока всего одну книгу прочел по игроделанию и знаний (а уж тем более практики) у меня не особо много по этой теме. Да и есть еще куча важных тем, например: звук, камера, датчики, координаты.

А в рунете нет чтоль толковых статей на эту тему?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение beeline09 » 28 фев 2013, 15:32

damager82 писал(а):
beeline09 писал(а):Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.
Кладите значение в preference, а виджетом читайте. Или я не понял вопрос.
Идея! Спасибо! :-) А как сделать, чтоб постоянно опрашивалось значение? Допустим раз в 3 минуты. Это сервис надо делать? Я с ними вообще не знаю как работать. Собственно в этом скорее всего и заключается проблема. Тот код должен работать в фоновом режиме и раз в три минуты обновлять виджет. Есть идеи как именно это реализовать с примером?

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

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение neoksi » 28 фев 2013, 15:52

damager82 писал(а):
neoksi писал(а):damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?
1) Там целый абзац посвящен этому.
Вы обратили внимание, что при создании PendingIntent мы использовали ID экземпляров виджета в качестве requestCode? Поясняю, зачем это сделано...
и т.д.
А ты представь ситуацию, когда на виджете 35 элементов с одним Action и разными экстра данными... (у меня на практике такой случай бывал)
Думаю тут лучше всего более тему раскрыть, так как ресурс REQUEST_CODE у PendingIntent ограничен на все приложение, а они используются и в уведомления и в виджетах, а так же в других случаях. Такая система назначения может повлечь потом незапланированные глюки приложения.
damager82 писал(а):2) А зачем? В моем случае в этом нет необходимости.
А если REQUEST_CODE уже занят к примеру нотификацией?

tserg
Сообщения: 4
Зарегистрирован: 18 фев 2013, 11:06

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение tserg » 14 мар 2013, 14:29

damager82 писал(а):
tserg писал(а):Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?
Хороший вопрос. Я пока всего одну книгу прочел по игроделанию и знаний (а уж тем более практики) у меня не особо много по этой теме. Да и есть еще куча важных тем, например: звук, камера, датчики, координаты.

А в рунете нет чтоль толковых статей на эту тему?
Есть несколько блогов по AndEngine. Но они не очень-то расчитаны на новичков. На английском конечно инфы завались, но с английским у меня не очень. Я в программировании не новичок. Нормально владею С++ и Delphi, работаю программистом 1С. Но вот OpenGL мне ещё в универе не дался (хотя под DiretX програмить получалось), а с таким подходом как у Вас написаны уроки я бы точно разобрался в этом вопросе.

З.Ы. Спасибо за классный ресурс.

darkchaos
Сообщения: 7
Зарегистрирован: 05 окт 2012, 09:27

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение darkchaos » 17 май 2013, 11:26

Автор, а как сделать чтобы запускался браузер по клику?

Вот мой код

Intent internet = new Intent();
internet.setAction(Intent.ACTION_VIEW);
internet.addCategory(Intent.CATEGORY_BROWSABLE);
internet.setData(Uri.parse("www.google.com"));
pIntent = PendingIntent.getBroadcast(ctx, widgetID, internet, 0);
widgetView.setOnClickPendingIntent(R.id.tvBrowser, pIntent);

Думал что не поскуает из-за uses-permission, но я его добавил (<uses-permission android:name="android.permission.INTERNET" />) и все равно не работает

darkchaos
Сообщения: 7
Зарегистрирован: 05 окт 2012, 09:27

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение darkchaos » 17 май 2013, 12:10

И еще когда я указываю что action имеет в манифесте значение android.appwidget.action.APPWIDGET_CONFIGURE или (это для след. урока)
<service
android:name="MyService"
android:permission="android.permission.BIND_REMOTEVIEWS" >
</service>
не отображаются в списке виджетов

darkchaos
Сообщения: 7
Зарегистрирован: 05 окт 2012, 09:27

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение darkchaos » 17 май 2013, 12:27

по поводу service я разобрался. надо было сначала reciever прописать, а вот с остальным нет((

radius17
Сообщения: 1
Зарегистрирован: 04 июн 2013, 09:07

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение radius17 » 09 июн 2013, 10:01

darkchaos писал(а):Автор, а как сделать чтобы запускался браузер по клику?

Вот мой код

Intent internet = new Intent();
internet.setAction(Intent.ACTION_VIEW);
internet.addCategory(Intent.CATEGORY_BROWSABLE);
internet.setData(Uri.parse("www.google.com"));
pIntent = PendingIntent.getBroadcast(ctx, widgetID, internet, 0);
widgetView.setOnClickPendingIntent(R.id.tvBrowser, pIntent);

Думал что не поскуает из-за uses-permission, но я его добавил (<uses-permission android:name="android.permission.INTERNET" />) и все равно не работает
Если я не ошибаюсь, то нужно не getBroadcast вызывать а getActivity
и протокол тоже указать ("http://")
У меня это дело так и работает

Аватара пользователя
vgavt
Сообщения: 8
Зарегистрирован: 12 апр 2012, 15:45

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение vgavt » 10 июн 2013, 22:33

не подскажите в чем может быть причина того, что на реальном телефоне виджета нет в списке. только на андроид 2.3. на всех других апаратах все работает( проверено на 4 аппаратах)))

SevenXP
Сообщения: 113
Зарегистрирован: 21 июл 2013, 18:20

Re: Урок 120. Виджеты. Обработка нажатий

Сообщение SevenXP » 25 ноя 2013, 17:40

С widget большая часть понятно.
Как привязать Widget к приложению. Что я хочу.
Хочу сделать программу которая будет проигрывать музыку. А Widget должен управлять приложение если оно было запущено, если нет то запустить. Как это делается?
Именно взаимодействие.
У меня есть бредовая идея но она не очень :)

Интересует как получать информацию с приложение в widget и как вызывать нужные функции в приложении через Widget.

Ответить