Форум программистов, компьютерный форум CyberForum.ru

База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране - Android

Войти
Регистрация
Восстановить пароль
 
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
01.01.2014, 15:47     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #1
Всем доброго времени суток
Возникла такая проблема: требуется создать очень простое приложение на Android, но опыта в разработке приложений для мобильных устройств у меня абсолютно никакого. Имеются довольно широкие познания в программировании, схватываю на лету, но на Java и, тем более, под Android ничего не писал.

Суть приложения такова:
Имеется база записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране. В принципе - всё! Желательно, чтобы работало приложение как виджет, без необходимости запускать его, чтобы увидеть запись.

Хочу сделать небольшой подарок дорогому человеку, а средств нет... Помогите, будьте добры. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2014, 15:47     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране
Посмотрите здесь:

Android Где брать иконки , фон?
База SqLite - проверка записей на существование Android
Показывать изображения, если они есть в Кэше Android
Как заставить ListView показывать ограниченное количество элементов? Android
Android Можно ли сделать приложение, которое будет брать RSS-ленту с моего сайта?
ActionBar, всегда показывать троеточие Android
Android "Цитата дня" - ваш личный сборник цитат на каждый день
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
01.01.2014, 17:18     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #2
Kollapser, смотрите, ничего сложного нет. Вот Вам пример простейшего виджета
хабр. База записей - прогуглите SQLite android, тоже много статей, работа с базой довольно простая. Что непонятно будет - пишите, разберёмся.
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 10:25  [ТС]     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #3
Промучился около получаса. Что мы имеем в итоге? Ничего. При запуске просто появляется стандартный "Hello World". Самого виджета в системе я не нашел. Код в MainActivity.java я не менял, а там прописано:

Java
1
2
3
4
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
То есть, как я понял, показывается стандартный слой.

Добавлено через 25 минут
Плюс почитал статьи об SQLite. Я понимаю далеко не все, что там написано. Вероятно, дело в том, что с ООП я практически не имел дел. И все мои познания ограничиваются процедурным программированием.

Я просто не успею до завтра разобраться с нуля в Java и осмысленно что-то сделать. Поэтому прошу вас мне помочь. Ведь для опытного человека задача совсем детская.

Добавлено через 3 часа 50 минут
Окей, пойдем немного другим путем. Решил не заморачиваться и просто хранить строи в массиве
Теперь в файле MainActivity.java после строки "public class MainActivity extends Activity" я пишу "String con[] = {"1","2"};" Таким образом у меня есть массив из двух элементов.
Теперь вопрос, как при запуске записать в textview один из элементов?

Добавлено через 2 минуты
Вызывает проблемы расположение этого присваивания и обращение к элементу

Добавлено через 2 минуты
Или может записать все элементы в константы и уже к ним обращаться?

Добавлено через 54 минуты
С виджетом тоже почти разобрался.
Делал как здесь. Все запускается, но не могу добавить виджет на рабочий стол. В виджетах его просто нет, а в приложение Widget Preview после выбора моего виджета появляется надпись "невозможно добавить виджет"

Добавлено через 57 минут
Переименовал проект, как в уроке - все заработало

Добавлено через 7 часов 52 минуты
Снова здравствуйте. Что-то не выходит, помогите допилить
Создал виджет, все замечательно. Теперь хочу самостоятельно его обновлять. В принципе, могу обойтись и стандартными методами так как временной промежуток довольно большой, но просто захотел проверить обновляется ли что-то вообще.

Имею в MyWidget.java такой код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.TextView;
 
public class MyWidget extends AppWidgetProvider {
  final String UPDATE_ALL_WIDGETS = "update_all_widgets";
  final String LOG_TAG = "myLogs";
  int i = 0;
 
  @Override
  public void onEnabled(Context context) {
      super.onEnabled(context);
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(),
            60000, pIntent);
        Log.d(LOG_TAG, "onEnabled");
  }
 
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int appWidgetID) {
      Log.d(LOG_TAG, "onUpdate " + Integer.toString(appWidgetID));
      i += 1;
      RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
      remoteViews.setTextViewText(R.id.tv,Integer.toString(i)); 
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
  }
 
  @Override
  public void onDisabled(Context context) {
      super.onDisabled(context);
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(UPDATE_ALL_WIDGETS);
        PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(pIntent);
  }
  
  @Override
  public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    if (intent.getAction().equalsIgnoreCase(UPDATE_ALL_WIDGETS)) {
      ComponentName thisAppWidget = new ComponentName(
          context.getPackageName(), getClass().getName());
      AppWidgetManager appWidgetManager = AppWidgetManager
          .getInstance(context);
      int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);
      for (int appWidgetID : ids) {
        onUpdate(context, appWidgetManager, appWidgetID);
      }
    }
  }
}
То есть каждую минуту, в теории у меня должен вызываться onUpdate и писать новую цифру на экране. Судя по логам, эта функция вызывается каждую минуту, но изменений на экране я не наблюдаю. Что не так?

Добавлено через 3 минуты
Он у меня немного поругался, в итоге пришлось убрать @Override перед апдейтом, а также заменить массив индексов просто на число (больше одного экземпляра виджета мне и не нужно)

Добавлено через 42 минуты
Чуть ошибся. В апдейте изменил i+=1 на i++. Теперь вывожу это число в логи, но оно тоже не меняется.

Добавлено через 46 минут
Извините за столь обильные подробности разработки

Так как ничего по сути не работало, вернул все обратно

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;
 
public class MyWidget extends AppWidgetProvider {
 
  final String LOG_TAG = "myLogs";
  int i = 0;
  
  @Override
  public void onEnabled(Context context) {
    super.onEnabled(context);
    Log.d(LOG_TAG, "onEnabled");
  }
 
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
    Log.d(LOG_TAG, Integer.toString(i));
    Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds));
    i ++;
    remoteViews.setTextViewText(R.id.tv,Integer.toString(i));
    Log.d(LOG_TAG, Integer.toString(i)); 
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
    Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds));
  }
 
  @Override
  public void onDisabled(Context context) {
    super.onDisabled(context);
    Log.d(LOG_TAG, "onDisabled");
  }
 
}
При запуске в логах вижу следующее:
01-02 11:42:35.066: D/myLogs(664): onEnabled
01-02 11:42:35.087: D/myLogs(664): onUpdate [7]
01-02 11:42:35.437: D/myLogs(664): onUpdate [7]
01-02 11:42:42.936: D/myLogs(769): 0
01-02 11:42:42.936: D/myLogs(769): onUpdate [8]
01-02 11:42:42.936: D/myLogs(769): 1

То есть переменная i, вроде как увеличивается, но значение её в textview не записывается, как быть-то?

Добавлено через 4 минуты
Ещё одна маленькая проблема: если удалить виджет и заново разместить то увидим в логах тоже самое, то есть создается новая переменная i, которой вновь присваивается значение 0. Можно её хранить где-нибудь, чтобы при случайном удалении виджета ничего не сломалось?

Или это не нужно? Так как все что осталось сделать, это заставить виджет обновляться два раза в день, допустим в 7.00 и в 22.00 и, в зависимости от даты, выводить два определенных сообщения.

Добавлено через 35 минут
Подождал полчаса. OnUpdate не вызывался. В логах в это время:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
01-02 12:15:08.078: D/ExchangeService(615): Received deviceId from Email app: null
01-02 12:15:08.078: D/ExchangeService(615): !!! deviceId unknown; stopping self and retrying
01-02 12:15:13.141: D/ExchangeService(615): !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
01-02 12:15:13.151: W/ActivityManager(275): Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
01-02 12:15:13.151: D/ExchangeService(615): !!! Email application not found; stopping self
01-02 12:15:13.161: W/ActivityManager(275): Unable to start service Intent { act=com.android.email.ACCOUNT_INTENT } U=0: not found
01-02 12:15:13.172: E/ActivityThread(615): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.172: E/ActivityThread(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.172: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.172: E/ActivityThread(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.172: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.172: E/ActivityThread(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.172: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.172: E/ActivityThread(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.181: E/StrictMode(615): null
01-02 12:15:13.181: E/StrictMode(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ce8d40 that was originally bound here
01-02 12:15:13.181: E/StrictMode(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.181: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.181: E/StrictMode(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.181: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.181: E/StrictMode(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.181: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.181: E/StrictMode(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.181: W/ActivityManager(275): Unbind failed: could not find connection for android.os.BinderProxy@41026820
01-02 12:15:13.191: E/ActivityThread(615): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/ActivityThread(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.191: E/ActivityThread(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.191: E/ActivityThread(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.191: E/ActivityThread(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.191: E/ActivityThread(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.191: E/ActivityThread(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.191: E/ActivityThread(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.191: E/StrictMode(615): null
01-02 12:15:13.191: E/StrictMode(615): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40ced1a0 that was originally bound here
01-02 12:15:13.191: E/StrictMode(615):  at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-02 12:15:13.191: E/StrictMode(615):  at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-02 12:15:13.191: E/StrictMode(615):  at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-02 12:15:13.191: E/StrictMode(615):  at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-02 12:15:13.191: E/StrictMode(615):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-02 12:15:13.191: E/StrictMode(615):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-02 12:15:13.191: E/StrictMode(615):  at java.lang.Thread.run(Thread.java:856)
01-02 12:15:13.201: W/ActivityManager(275): Unbind failed: could not find connection for android.os.BinderProxy@41052dd8
01-02 12:15:58.207: D/ExchangeService(615): Received deviceId from Email app: null
01-02 12:15:58.207: D/ExchangeService(615): !!! deviceId unknown; stopping self and retrying
01-02 12:16:03.271: D/ExchangeService(615): !!! EAS ExchangeService, onStartCommand, startingUp = false, running = false
Виджет был создан в 11.45
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.01.2014, 12:28     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #4
Kollapser, onUpdate - коллбэк, который вызывать в ручную не надо.
update widget

Вот что написано в доках
"Called in response to the ACTION_APPWIDGET_UPDATE broadcast when this AppWidget provider is being asked to provide RemoteViews for a set of AppWidgets. Override this method to implement your own AppWidget functionality."
Т.е. это реакция на ресивер.
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 15:24  [ТС]     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #5
Хорошо, я убрал собственное обновление. Но, судя по логам, автоматическое тоже не работает.
И подскажите, пожалуйста, как вывести элемент массива в textview на виджете. Указанный мной код не работает.

Добавлено через 1 час 17 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package ru.startandroid.develop.p1171simplewidget;
 
import java.util.Arrays;
 
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.util.Log;
import android.widget.RemoteViews;
 
public class MyWidget extends AppWidgetProvider {
 
  final String LOG_TAG = "myLogs";
 
  @Override
  public void onEnabled(Context context) {
    super.onEnabled(context);
    Log.d(LOG_TAG, "onEnabled");
  }
 
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager,
      int[] appWidgetIds) {
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    Log.d(LOG_TAG, "onUpdate " + Arrays.toString(appWidgetIds));
    for (int id : appWidgetIds) {
        updateWidget(context, appWidgetManager, id);
    }
  }
 
  @Override
  public void onDeleted(Context context, int[] appWidgetIds) {
    super.onDeleted(context, appWidgetIds);
    Log.d(LOG_TAG, "onDeleted " + Arrays.toString(appWidgetIds));
  }
 
  @Override
  public void onDisabled(Context context) {
    super.onDisabled(context);
    Log.d(LOG_TAG, "onDisabled");
  }
  
  static void updateWidget(Context context, AppWidgetManager appWidgetManager, int widgetID) {  
      
        RemoteViews widgetView = new RemoteViews(context.getPackageName(),
            R.layout.widget);
        widgetView.setTextViewText(R.id.tv, "Привет");
     
        appWidgetManager.updateAppWidget(widgetID, widgetView);
      }
 
}
Вот так все работает.

Добавлено через 1 час 34 минуты
С отображением текста проблем нет. Теперь вопрос: как поменять шрифт в TextView? И можно ли это вообще сделать? У remoteViews нет метода settypeface(
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.01.2014, 16:31     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #6
Цитата Сообщение от Kollapser Посмотреть сообщение
С отображением текста проблем нет. Теперь вопрос: как поменять шрифт в TextView? И можно ли это вообще сделать? У remoteViews нет метода settypeface(
Изменение размера шрифта
docs

хабр изменение typeface. Вы гуглом пользуетесь вообще?
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:14  [ТС]     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #7
YuraAAA, я пробовал, но он создает одну длинную картинку, которая на экран не влезает. Что делать, если несколько строк?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.01.2014, 18:26     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #8
Может попробовать разбить на несколько строк?
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:41  [ТС]     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #9
YuraAAA, ладно. Спасибо большое за помощь. Не буду больше заморачиваться. Вроде, все работает. Просто с текстом. Теперь вопрос как это грамотно экспортировать и закинуть на телефон. У самого смартфона отродясь не было, так что асболютно не в курсе. Почитал про экспорт в jar, но у меня же виджет. Не уверен, что будет корректно работать.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.01.2014, 18:45     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #10
Я никогда виджеты не делал, но мне кажется, что это такой же apk файл. Так что просто сделайте build и в папке с проектом должна остаться apk-шка)
Kollapser
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 31
02.01.2014, 18:58  [ТС]     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #11
YuraAAA, если я правильно понял, то нужно выставить галочку build automatically и скомпилить? Я так и сделал. D:\Android\workspace\P1171_SimpleWidget\bin там есть apk-файлик, который весит 287 кб. Его можно скидывать на телефон и запускать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 19:07     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране
Еще ссылки по теме:

При вводе слов из Википедии брать значение этого слова и отображать в TextView Android
Отсчитать пару секунд Android
Как лучше хранить небольшие (до 50 записей) и крупные до 600-1000 записей данные? Android
Как при повороте экрана показывать видео дальше, а не сначала Android
Android Показывать или скрывать записи в адаптере

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
02.01.2014, 19:07     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране #12
да, всё верно
Yandex
Объявления
02.01.2014, 19:07     База записей, из которой каждый день нужно брать пару-тройку определенных и показывать на экране
Ответ Создать тему
Опции темы

Текущее время: 01:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru