Показаны сообщения с ярлыком missed calls. Показать все сообщения
Показаны сообщения с ярлыком missed calls. Показать все сообщения

среда, 15 июня 2011 г.

Про часы..

Вчера начал прикидывать новые часы (что-то мне самому они надоедают чуть ли не к моменту релиза :) хотя на локскрине и на основном домашнем экране - мои часы):

Прозрачный (или слегка затемненный) фон, на всю ширину экрана; текущие значения "жирные", остальные - бледненькие.. мне такие нравятся

В углу можно показывать пропущенные события или заряд батарейки (потому что последнее время настроил лаунчер так, чтобы он не показывал верхнюю полоску со статусом - так что чем больше покажу, тем типа комфортнее..)

Если сделаю к выходным - будет повод поднять версию; заодно может добавлю французскую и нормальную английскую локализации (обещали), а то мой английский такой английский..

Статистика по паку моих часов кстати такая (вдруг кому-то интересно):

  • загружены из маркета 1400 раз; график установок резко ступенчатый, не знаю, с чем это связано :)
  • установлены на 370 устройствах, т.е. если я правильно понимаю это устройства, на которые установили и не удалили; 26%
  • больше половины дивайсов - андроид 2.2, треть - 2.1, 2.3 - остальные
  • основные языки (я так понимаю локали, которые выбраны в телефонах) - англ, русский и франц.

Ссылка (кликабельна в компьютерном браузере) на маркет:

воскресенье, 22 мая 2011 г.

Обновил виджеты..

Почти по расписанию неформальному: выходные - время обновить чего-нибудь

Переделал один виджет полностью, добавил показ конвертика, если есть непрочитанные письма, в связи с чем при установке добавляются два пермишена - на чтение почты gmail и на получение списка аккаунтов

 

Если показывать нечего (в смысле нет пропущенных/непрочитанных), но телефон в зарядке - показывается значек батарейки; если батарейка садится - показывается значек пустой батарейки

Повесил себе на лок-скрин

воскресенье, 1 мая 2011 г.

День працi..

Ну кто как только не называет халявный выходной (от проклятых коммунистов доставшийся, ага) - гугл вон логотипом порадовал, "День працi" (день труда то есть) - 1-го мая кроме "водка пить река купаться" разве народ что-то еще делает?? Не видел никогда :)


Ну хотя я вот :) сижу, "работаю.. C получением пропущенных событий (а именно смс) бага таки откопалась - неск. раз часы останавливались и процесс с сервисом убивался, наконец поймал лог - все из-за смс..

Сел вчера навести красоту, заодно и кроме получения новой смс получилось отлавливать прочтение: если для новых можно было мониторить "content://sms/", то для получения события, что смс прочитано, надо вешаться на "content://mms-sms/"..

А все имхо потому, что апи ж недокументировано, так что никто никому ничего не должен :)

 

воскресенье, 17 апреля 2011 г.

КПВ (картинка для привлечения внимания)

Вот так вот все у меня плохо - занимаясь непонятно чем звонок пропустил, почту не читаю, смс игнорирую, пропустил запланированное событие..

С пропущенной почтой все более-менее просто оказалось: сначала надо получить список ящиков почтовых:

   AccountManager mgr = AccountManager.get(getApplicationContext());
   Account[] accounts = mgr.getAccountsByType("com.google");
   for (Account ac : accounts) {
     ac.type - это тип аккаунта (com.google - почта, там еще твитер может быть и прочие)
     ac.name - почтовый адрес, то что собственно нужно
   }

А потом для каждого ящика узнать, есть/нет непрочитанные в Inbox:

            final Uri gmailUri = Uri.parse("content://gmail-ls/labels/");
            uri = Uri.withAppendedPath(gmailUri, account_name);
            Cursor cursor = getContentResolver().query(
                    uri,
                    new String[]{"canonicalName", "numUnreadConversations"},
                    null, null, null);

            if (cursor != null) {
                cursor.moveToFirst();

                unreadedMail = 0;
                while (cursor.moveToNext()) {
                    String name = cursor.getString(0);
                    if (name.equals("^i")) {
                        return cursor.getInt(1);
                    }
                }
            }
            return -1;

В разрешения надо подобавлять конечно разрешение на доступ к аккаунт-менеджеру и на доступ к gmail

понедельник, 14 марта 2011 г.

Missed calls count

Вчера доприводил в порядок свою кучу часов для андроида, оставил пока 3 штуки, зато пододелывал настройки и ориентации экрана разные, и решил, что дальше надо их рисовать уже с учетом показа количества пропущенных звонков

Потому что часы эти я делаю для локскрина и ткнув в телефон кнопкой я хочу, чтобы он показал мне а) время (потому что часы на руке не ношу уже лет и лет) и б) ничего ли я не пропустил (не звонил ли кто, не пришла ли дурная смс с рекламой etc)

Вот.. так что вчера я учился "слушать" - не звонил ли кто. Во-первых, можно повесится случать бродкаст от TelephoneManager и получать сообщения, когда приходит входящий звонок или нажимается "отбой" - но не решается случай, когда у меня были пропущенные звонки, я пошел в "телефонию" и просмотрел их

Так что все таки почитал про ContentObserver: грубо говоря это обьект, который реагирует на изменения определенного содержимого, в моем случае это CallLog.Calls.CONTENT_URI

Код получился несложный ни разу:

    private class EventsObserver extends ContentObserver {

        public EventsObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {

            final int t = missedCallsCount;
            Cursor c = getContentResolver().query(
                    CallLog.Calls.CONTENT_URI,
                    null,
                    CallLog.Calls.TYPE + " = ? AND " + CallLog.Calls.NEW + " = ?",
                    new String[]{Integer.toString(CallLog.Calls.MISSED_TYPE), "1"},
                    CallLog.Calls.DATE + " DESC"
            );

            missedCallsCount = c.getCount();
            if (t != missedCallsCount) {
                getApplicationContext().sendBroadcast(new Intent("info.hamster.widgets.time_to_update"));
            }
        }
    }

Ну и обьект создать и зарегить надо


    getApplicationContext().getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, eventsObserver);

Как только что-нибудь происходит, так я и смотрю, не поменялось ли количество пропущенных, и если поменялось - шлю бродкаст "свой", что надо бы виджеты обновить. Не оптимально, но пока работает, вот и пусть работает, меня еще интересует - непрочитанные смс, почта, твиты.. Вот когда со всем разберусь - можно будет оптимизить и так далее

Как это тестить: реальным телефоном принимать звонки - глупо, есть есть эмулятор, который этому обучен. Нужен telnet-клиент (на 7-ке оказывается нет, надо скачать Putty - легкий и бесплатный telnet/ssh клиент)

Запускаем и коннектимся к localhost к порту, который сейчас занял эмулятор - он его в заголовке окна пишет, по-моему обычно это 5554. Приконектились, получили консоль (очень неудобную между прочим.. ну типа стрелка вверх не вызывает предыдущую команду, хотя скорее всего это я туплю и или надо putty настроить, или другие сочетания клавишь для этого используются)

Чтобы позвонить "на эмулятор", пишем:

  gsm call 12345

и вуаля - входящий звонок от "12345"! Для имитации непринятого вызова не дожидаясь ответа :) сбрасываем звонок:

  gsm cancel 12345

Ну собственно и все, тестить можно.. там help прямо в консольке можно набрать и узнать, что много чего можно сделать - смс-ку прислать и кучу всего такого