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

AlarmManager android траблы - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Добавление navigation drawer http://www.cyberforum.ru/android-dev/thread1705898.html
Привет, есть приложение со множеством активити... нужно запихнуть в него navigation drawer c иконками и текстом к ним. И у меня почти это удалось, но не знаю , как прикрепить иконки к тексту... от части копи-пастил поэтому прошу помощи, куда и как закрепить иконки к тексту из меню one two three ? вот Main import android.content.Context; import android.content.DialogInterface; import...
Android Как оптимизировать ListviewAdapter чтобы не было разрывов при скроллинге Есть адаптер из него не удалось сделать плавный скроллин . Мой ListviewAdapter public class ListViewAdapter extends BaseAdapter { static class ViewHolder { TextView theme; TextView contacts; http://www.cyberforum.ru/android-dev/thread1705844.html
Android Как отправлять get, post запрос а затем обработать в формате json?
Как на android srudio отправить post, ger запрос, затем обработать ответ в формате json
Android Программно включить запись телефонного звонка
Есть ли способ программно включить стандартную записи разговора ? Иле есть какие то библиотеки которые могут записывать разговор? Поделитесь опытом)
Android Парсинг сайта и кодировка http://www.cyberforum.ru/android-dev/thread1705556.html
Добрый день. Начала изучать вопрос парсинга страниц, наткнулась на тему на хабрена тему на хабре Сделала, вроде, все правильно, но никак не могу разобраться с кодировкой страниц. Вместо русских букв получаю ромбики с вопросами. Пробовала указать кодировку UTF-8 и Windows-1251 -не помогло. Прикладываю код классов и скрин экрана. Ради примера взята ветка этого форума. import...
Android выделить область подскажите, можно ли выделить область на лаяуте, и вывода сообщения выше него? допустим нужна область размером 10 на 10, далее при клике на эту область, выше него появлялся текст (сообщение), так же при клике убиралась сообщение. в инете искал информацию не нашел, или же не так задавал запрос для поиска подробнее

Показать сообщение отдельно
mathahakar
2 / 2 / 1
Регистрация: 31.01.2014
Сообщений: 80

AlarmManager android траблы - Android

07.04.2016, 18:23. Просмотров 135. Ответов 0
Метки (Все метки)

Пожалуйста, помогите с вопросом.
Очень туго почему-то заходит мне тема с Alarm-ами.
Суть такова:
Имеется таблица в БД, в которой каждая запись содержит день недели, часы и минуты для сигнала (что-то вроде будильника). И, когда наступает время, должна вызываться активити (при чём, даже в режиме сна, но это детали уже). Вот, накидал такой код:
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
public class TaskScanner {
 
    Context context;
    DBHelper dbHelper;
 
    public TaskScanner (Context context, DBHelper dbHelper) {
        this.context = context;
        this.dbHelper = dbHelper;
    }
 
    /**
     * Сканирование задач из таблицы SCHEDULE
     * и установка их сигналов
     */
    public void scanTasks () {
        int rows = dbHelper.getRowsQuantity("SCHEDULE");
 
        SQLiteDatabase db = dbHelper.getReadableDatabase();
        Cursor c = db.query("SCHEDULE", null, null, null, null, null, null);
 
        int dayColIndex = c.getColumnIndex("DAY");
        int hourColIndex = c.getColumnIndex("HOURS");
        int minuteColIndex = c.getColumnIndex("MINUTES");
 
        // Цикл для чтения таблицы БД и записи данных в переменные
        for (int i = 0; i < rows; i ++) {
            // Дефолтные значения переменных
            int hour = 0;
            int minute = 0;
            int dayOfWeek = 0;
 
            // Получение значений из БД
            if (c.moveToNext()) {
                hour = c.getInt(hourColIndex);
                minute = c.getInt(minuteColIndex);
                dayOfWeek = c.getInt(dayColIndex);
            }
 
            // Получение объекта календаря с текущим временем
            Calendar cal = Calendar.getInstance();
 
            // добавление сигнала
            cal.set(Calendar.DAY_OF_WEEK, dayOfWeek + 1);
            cal.set(Calendar.HOUR_OF_DAY, hour);
            cal.set(Calendar.MINUTE, minute);
            cal.set(Calendar.SECOND, 0);
 
            AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            Intent intent = new Intent(context, AlarmReceiver.class);
            intent.putExtra("alarm message", "alarm message");
            PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender);
            }
    }
}
И BroadcastReceiver :

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class AlarmReceiver extends BroadcastReceiver {
 
    private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ACTION_BOOT.equals(intent.getAction())) {
            try {
                Bundle bundle = intent.getExtras();
                String message = bundle.getString("alarm_message");
                Intent newIntent = new Intent(context, SignalsActivity.class);
                newIntent.putExtra("alarm_message", message);
                newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(newIntent);
            } catch (Exception e) {
                Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
 
            }
        }
    }
}
Вызываю метод scanTasks() в MainActivity в onCreate();

Значится, что плохо:
1) Ресивер не срабатывает при перезагрузке устройства. Объясните, пожалуйста, принцип его срабатывания. В манифесте он прописан, ровно как и permission на получение окончания загрузки:

XML
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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dailytoys.exreminder">
 
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
 
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <activity
            android:name=".ExercisesActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
 
        <activity
            android:name=".SignalsActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
 
        <receiver android:name='.AlarmManagerEx.AlarmReceiver'>
        </receiver>
 
        <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
             App Indexing.  See [url]https://g.co/AppIndexing/AndroidStudio[/url] for more information. -->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
 
    </application>
 
</manifest>
2) Если не обращать внимания на неработу после перезагрузки, то появляется другая проблема. В БД есть множество записей, например: "понедельник 15:00", "вторник 16:30", "четверг 12:00", "четверг 18:30".
И вот соль в том, что алармы то срабатывают, НО. Мгновенно. Если допустим, сейчас четверг, 18:20 , а запись есть в БД про четверг 18:00, то аларм срабатывает мгновенно.
3) Возможно, я что-то не так понял:
В onReceive мы обрабатываем реакцию менеджера на обращение к нему. Пожалуйста, скажите, правильно я понимаю (судя по комментариям в коде):
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
public class AlarmReceiver extends BroadcastReceiver {
    // Константа завершения загрузки девайса
    private static final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
 
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ACTION_BOOT.equals(intent.getAction())) { // Реагируем на окончание загрузки устройства
            try {
                Bundle bundle = intent.getExtras();
                String message = bundle.getString("alarm_message");
                Intent newIntent = new Intent(context, SignalsActivity.class);
                newIntent.putExtra("alarm_message", message);
                newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(newIntent);
            } catch (Exception e) {
                Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        } else { // Реагируем на все остальные возможные состояния устройства
            try {
                Bundle bundle = intent.getExtras();
                String message = bundle.getString("alarm_message");
                Intent newIntent = new Intent(context, SignalsActivity.class);
                newIntent.putExtra("alarm_message", message);
                newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(newIntent);
            } catch (Exception e) {
                Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
 
}
Помогите, пожалуйста, очень нужно.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru