Урок 120. Виджеты. Обработка нажатий
Урок 120. Виджеты. Обработка нажатий
В этом уроке:
- обрабатываем нажатия на виджет
Click here to read this article!
- обрабатываем нажатия на виджет
Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:43, всего редактировалось 3 раза.
Re: Урок 120. Виджеты. Обработка нажатий
Добрый вечер. у меня в схожем приложении следующая ошибка возникает.
после звонка по телефону перестают работаеть клики по виджету до следующего автоматического апдейта onupdate. с чем это может быть связано?
после звонка по телефону перестают работаеть клики по виджету до следующего автоматического апдейта onupdate. с чем это может быть связано?
Re: Урок 120. Виджеты. Обработка нажатий
trololo1
По моему субъективному мнению, сбрасывается значение PendingIntent у лаунчера. Но надо смотреть код. А в виджетах от других программ, тоже такое происходит?
damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?
По моему субъективному мнению, сбрасывается значение PendingIntent у лаунчера. Но надо смотреть код. А в виджетах от других программ, тоже такое происходит?
damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?
Re: Урок 120. Виджеты. Обработка нажатий
neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
Re: Урок 120. Виджеты. Обработка нажатий
При любой перерисовке remoteviews, лучше все инициализировать заново.trololo1 писал(а):neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
Re: Урок 120. Виджеты. Обработка нажатий
да . походу дела, это единственный вариант правильной инициализации.neoksi писал(а):При любой перерисовке remoteviews, лучше все инициализировать заново.trololo1 писал(а):neoksi, может быть, что сбрасывается. У меня AlarmManager запускает Service, в котором запускается через определённый промежуток времени ExecutorService, в котором запрашивается сайт, а там уже из информации на сайте вставляется информация в виджет через remoteviews.
В виджетах других программ такое не встречал.
Может кто с этим сталкивался. Я же в явном виде не сбрасываю значения pendingintent для кнопок...Виджет сам по себе ошибок, вроде бы, не даёт. Инициализация PendingIntent для кликов происходит только в одном месте.
Re: Урок 120. Виджеты. Обработка нажатий
Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?
Re: Урок 120. Виджеты. Обработка нажатий
Наконец-то дождался я темы про виджеты))) Спасибо большое автору!
Ну а теперь по делу...
Вот создал я виджет по уроку, а теперь хочу модифицировать следующим образом. Есть код, который читает команду из ответа sh. Не знаю на сколько правильно выразился.:
Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.
Ну а теперь по делу...
Вот создал я виджет по уроку, а теперь хочу модифицировать следующим образом. Есть код, который читает команду из ответа 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();
}
Re: Урок 120. Виджеты. Обработка нажатий
1) Там целый абзац посвящен этому.neoksi писал(а):damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?
и т.д.Вы обратили внимание, что при создании PendingIntent мы использовали ID экземпляров виджета в качестве requestCode? Поясняю, зачем это сделано...
2) А зачем? В моем случае в этом нет необходимости.
Re: Урок 120. Виджеты. Обработка нажатий
Кладите значение в preference, а виджетом читайте. Или я не понял вопрос.beeline09 писал(а):Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.
Re: Урок 120. Виджеты. Обработка нажатий
Хороший вопрос. Я пока всего одну книгу прочел по игроделанию и знаний (а уж тем более практики) у меня не особо много по этой теме. Да и есть еще куча важных тем, например: звук, камера, датчики, координаты.tserg писал(а):Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?
А в рунете нет чтоль толковых статей на эту тему?
Re: Урок 120. Виджеты. Обработка нажатий
Идея! Спасибо! А как сделать, чтоб постоянно опрашивалось значение? Допустим раз в 3 минуты. Это сервис надо делать? Я с ними вообще не знаю как работать. Собственно в этом скорее всего и заключается проблема. Тот код должен работать в фоновом режиме и раз в три минуты обновлять виджет. Есть идеи как именно это реализовать с примером?damager82 писал(а):Кладите значение в preference, а виджетом читайте. Или я не понял вопрос.beeline09 писал(а):Теперь мне нужно допустим по нажатию на update в R.id.tvCount чтоб положилось значение strL1. Как мне реализовать подобное? Ради эксперимента хочу прочитать ответ от "cat /proc/swaps" и вывести его в R.id.tvCount.
Re: Урок 120. Виджеты. Обработка нажатий
А ты представь ситуацию, когда на виджете 35 элементов с одним Action и разными экстра данными... (у меня на практике такой случай бывал)damager82 писал(а):1) Там целый абзац посвящен этому.neoksi писал(а):damager82
После прочтения кода в уроке, у меня возникло 2 вопроса по использованию в нем PendingIntent:
1) Почему у всех нажимаемых элементов REQUEST_CODE = widgetID?
2) Почему не используются флаги гарантирующие перезапись Intent?и т.д.Вы обратили внимание, что при создании PendingIntent мы использовали ID экземпляров виджета в качестве requestCode? Поясняю, зачем это сделано...
Думаю тут лучше всего более тему раскрыть, так как ресурс REQUEST_CODE у PendingIntent ограничен на все приложение, а они используются и в уведомления и в виджетах, а так же в других случаях. Такая система назначения может повлечь потом незапланированные глюки приложения.
А если REQUEST_CODE уже занят к примеру нотификацией?damager82 писал(а):2) А зачем? В моем случае в этом нет необходимости.
Re: Урок 120. Виджеты. Обработка нажатий
Есть несколько блогов по AndEngine. Но они не очень-то расчитаны на новичков. На английском конечно инфы завались, но с английским у меня не очень. Я в программировании не новичок. Нормально владею С++ и Delphi, работаю программистом 1С. Но вот OpenGL мне ещё в универе не дался (хотя под DiretX програмить получалось), а с таким подходом как у Вас написаны уроки я бы точно разобрался в этом вопросе.damager82 писал(а):Хороший вопрос. Я пока всего одну книгу прочел по игроделанию и знаний (а уж тем более практики) у меня не особо много по этой теме. Да и есть еще куча важных тем, например: звук, камера, датчики, координаты.tserg писал(а):Автор, простите что не в тему, но очень хочется знать, когда дойдем до OpenGL?
А в рунете нет чтоль толковых статей на эту тему?
З.Ы. Спасибо за классный ресурс.
Re: Урок 120. Виджеты. Обработка нажатий
Автор, а как сделать чтобы запускался браузер по клику?
Вот мой код
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" />) и все равно не работает
Вот мой код
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" />) и все равно не работает
Re: Урок 120. Виджеты. Обработка нажатий
И еще когда я указываю что action имеет в манифесте значение android.appwidget.action.APPWIDGET_CONFIGURE или (это для след. урока)
<service
android:name="MyService"
android:permission="android.permission.BIND_REMOTEVIEWS" >
</service>
не отображаются в списке виджетов
<service
android:name="MyService"
android:permission="android.permission.BIND_REMOTEVIEWS" >
</service>
не отображаются в списке виджетов
Re: Урок 120. Виджеты. Обработка нажатий
по поводу service я разобрался. надо было сначала reciever прописать, а вот с остальным нет((
Re: Урок 120. Виджеты. Обработка нажатий
Если я не ошибаюсь, то нужно не getBroadcast вызывать а getActivitydarkchaos писал(а):Автор, а как сделать чтобы запускался браузер по клику?
Вот мой код
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" />) и все равно не работает
и протокол тоже указать ("http://")
У меня это дело так и работает
Re: Урок 120. Виджеты. Обработка нажатий
не подскажите в чем может быть причина того, что на реальном телефоне виджета нет в списке. только на андроид 2.3. на всех других апаратах все работает( проверено на 4 аппаратах)))
Re: Урок 120. Виджеты. Обработка нажатий
С widget большая часть понятно.
Как привязать Widget к приложению. Что я хочу.
Хочу сделать программу которая будет проигрывать музыку. А Widget должен управлять приложение если оно было запущено, если нет то запустить. Как это делается?
Именно взаимодействие.
У меня есть бредовая идея но она не очень
Интересует как получать информацию с приложение в widget и как вызывать нужные функции в приложении через Widget.
Как привязать Widget к приложению. Что я хочу.
Хочу сделать программу которая будет проигрывать музыку. А Widget должен управлять приложение если оно было запущено, если нет то запустить. Как это делается?
Именно взаимодействие.
У меня есть бредовая идея но она не очень
Интересует как получать информацию с приложение в widget и как вызывать нужные функции в приложении через Widget.