Урок 100. Service. IntentService. Foreground. Автозагрузка сервиса

Обсуждение уроков
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mikhail_dev » 09 сен 2013, 18:16

Вот к примеру часть нашего манифеста, где это работает
[syntax=xml]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.lab_m.whowhere"
android:versionCode="1053"
android:versionName="1.9.1053" >

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="18"/>
....
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:name=".App"
android:debuggable="true"
android:icon="@drawable/ic_launcher"
android:theme="@style/Theme.whowhere"
android:label="@string/app_name" >
<service
android:name=".GPSService"
android:process=":remote" >
<intent-filter>
<action android:name=".Service" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
</intent-filter>
</service>

<receiver
android:name=".BootUpReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
...
[/syntax]

Dronja
Сообщения: 12
Зарегистрирован: 05 сен 2013, 17:34

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Dronja » 10 сен 2013, 13:05

no-- писал(а):Вот к примеру часть нашего манифеста, где это работает
Спасибо, но один в один прописываю манифест и все равно на 4.0 не работает. Пойду искать бубен )

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mikhail_dev » 10 сен 2013, 14:54

Может не там ищете? К примеру у меня было так, что в автозагрузке была задействована флешка, которая не могла за 10 секунд смонтироваться и Андроид радостно выгружал сервис. Т.е. другими словами, onCreate должен запуститься за 10 секунд.

Аватара пользователя
Isaev
Сообщения: 145
Зарегистрирован: 03 сен 2013, 09:39
Откуда: Германия
Контактная информация:

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Isaev » 07 ноя 2013, 10:53

neoksi писал(а):По поводу второго вопроса, если ты не сохранил данные сервиса перед выключением устройства, то ты потерял данные, так как при выключении устройства все процессы сервисов просто киляются без вызова у них onDestroy.
neoksi писал(а):Я лично сделал отдельный ресивер на событие отключения и в нем вызываю остановку сервиса. А вся процедура сохранения у меня в onDestroy сервиса. Загрузка данных в onCreate.
Что-то я не понял смысла тогда. Если onDestroy не вызывается, как там можно что-то сохранять?

nunuchek
Сообщения: 6
Зарегистрирован: 27 мар 2013, 14:23

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение nunuchek » 30 янв 2014, 12:26

Подскажите, как запускать сервис если приложение было остановлено через Настройки?
(Настройки->Диспетчер приложений->Приложение->Принуд. остановить)

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mikhail_dev » 30 янв 2014, 13:10

Никак. Только после перезагрузки, если стоит в бутзагрузке приложение.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение klblk » 30 янв 2014, 13:23

nunuchek писал(а):Подскажите, как запускать сервис если приложение было остановлено через Настройки?
(Настройки->Диспетчер приложений->Приложение->Принуд. остановить)
Вероятно только перезапуском приложения вручную. Иначе бы начали появляться совсем не убиваемые сервисы, что не есть хорошо.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение altwin » 30 янв 2014, 14:11

klblk писал(а):
nunuchek писал(а):Подскажите, как запускать сервис если приложение было остановлено через Настройки?
(Настройки->Диспетчер приложений->Приложение->Принуд. остановить)
Вероятно только перезапуском приложения вручную. Иначе бы начали появляться совсем не убиваемые сервисы, что не есть хорошо.
они как бы есть. В kit kat это стало доступно(на не рутованных девайсах) не только google, но и простым смертным и называется это Privileged Apps(по сути достаточно поместить приложение в /system/priv-app).

P.S. вы конечно правы, если я убил app он должен быть убитым в моем устройстве, но это всего лишь машина и делает она то, что ей скажут, правда если раньше приходилось применять "хак", теперь google дал такую возможность.

Так же это доступно через "нативный" код не зависимый от Android Framework. И это ооочень активно применяется в различного рода custom прошивках.
Изображение

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение G_O_R » 18 апр 2014, 10:21

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

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение klblk » 18 апр 2014, 11:32

1) Можно попробовать WakeLock (http://developer.android.com/intl/ru/re ... eLock.html). Если он не поможет, то вероятно ничего уже сервис не спасет.
2) По включению после блокировки можно попробовать вот этот ресивер: http://stackoverflow.com/questions/1616 ... ot-working

G_O_R
Сообщения: 57
Зарегистрирован: 13 ноя 2012, 08:02

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение G_O_R » 18 апр 2014, 11:59

klblk писал(а):1) Можно попробовать WakeLock (http://developer.android.com/intl/ru/re ... eLock.html). Если он не поможет, то вероятно ничего уже сервис не спасет.
2) По включению после блокировки можно попробовать вот этот ресивер: http://stackoverflow.com/questions/1616 ... ot-working
спасибо большое. сейчас попробую

Аватара пользователя
Fry
Сообщения: 183
Зарегистрирован: 07 дек 2013, 22:07

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Fry » 03 фев 2015, 10:33

В уроке написано, что переход в Foreground вызывает вызов соответствующего нотификейшена.

Обязательно ли оно должно вызываться? И можно перейти в Foreground без этого уведомления?
Arbeit macht Fry

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение klblk » 04 фев 2015, 06:49

Fry писал(а):В уроке написано, что переход в Foreground вызывает вызов соответствующего нотификейшена.

Обязательно ли оно должно вызываться? И можно перейти в Foreground без этого уведомления?
На сколько я знаю обязательно. Можно попробовать передать null вместо нотификации, но я не проверял и не знаю будет ли это работать.
Суть в том, что пользователь должен видеть, что у него запущен на устройстве не убиваемый сервис и для этого нужна не убиваемая нотификация. =)

GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение GRAF_COLLIOSTRO » 10 фев 2015, 14:16

эммм.... неожиданно)
не выложена полная разжёванная инфа от "создадим проект" до "а вот сюда вот воткните вот эту галочку")))
после 99 копи-пастов на сотом заходе пришлось включить мозги)

startService(intent.putExtra("time", 3).putExtra("label", "Call 1") ); - как написано в тексте урока не работает - ругается на интент.

Intent intent = null; компилируется, но в эмуляторе вываливается по нажатии на кнопку

Intent intent = new Intent (this, MyService.class); в тексте урока не хватает вот этого) спасибо, заставили думать)))

на видео подглядел startService(new Intent(this, MyService.class).putExtra ...

короче нужно покурить и выпить пару бутылок, обдумать всё и понять - неделю ковыряю, но с этими потоками пока честно говоря каша(((

а вообще спасибо за уроки! материал бесценен!

ValeriusSR
Сообщения: 9
Зарегистрирован: 14 дек 2012, 09:14

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение ValeriusSR » 08 июл 2015, 10:58

Привет, народ!
А у меня такой вопрос:
Хочу добиться чтобы иконка моего сервиса постоянно болталась в статус-баре, а сообщение о запущенной службе
было не в нотификации, а в поле "Текущие операции".
На скриншотах примером является приложение ACR.
Его иконка в виде трубки телефона в белом круге.
Сообщение о приложении находится не в поле &quot;Нотификация&quot;, а в поле &quot;Текущие операции&quot;
Сообщение о приложении находится не в поле "Нотификация", а в поле "Текущие операции"
Screenshot_2015-07-08-12-32-40.jpeg (518.69 КБ) 13250 просмотров
Иконка приложения ACR (белый круг с трубкой)
Иконка приложения ACR (белый круг с трубкой)
Screenshot_2015-07-08-12-29-06.jpeg (896.5 КБ) 13250 просмотров
Иначе при стирании нотификаций пропадает и иконка моего сервиса из статуса, а это не есть хорошо...

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение klblk » 08 июл 2015, 11:41

ValeriusSR писал(а):Иначе при стирании нотификаций пропадает и иконка моего сервиса из статуса, а это не есть хорошо...
Не должно быть этого если сервис в режиме Foreground запущен.

ValeriusSR
Сообщения: 9
Зарегистрирован: 14 дек 2012, 09:14

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение ValeriusSR » 08 июл 2015, 12:27

klblk писал(а):
ValeriusSR писал(а):Иначе при стирании нотификаций пропадает и иконка моего сервиса из статуса, а это не есть хорошо...
Не должно быть этого если сервис в режиме Foreground запущен.
Вы правы! Спасибо.

Аватара пользователя
mkw
Сообщения: 2
Зарегистрирован: 04 авг 2015, 14:50

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение mkw » 04 авг 2015, 14:52

Воспользовался данным уроком. Создал Сервис и бродкас но система не хочет реагировать на событие и вызывать сервис. Кто может скинуть рабочий пример реализации например на action = android.intent.action.BATTERY_CHANGED ?? Буду очень благодарен. В интернете куча примеров перепробовал сервис не запускается.

UPD: Проблему решил ...
Последний раз редактировалось mkw 21 авг 2015, 22:49, всего редактировалось 1 раз.

Mkay
Сообщения: 3
Зарегистрирован: 21 авг 2015, 18:02

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mkay » 21 авг 2015, 18:27

Здравствуйте. Помогите, пожалуйста, разобраться с функцией автозагрузки. Я уже замучался, кучу статей и советов перечитал, много чего перепробовал, но хоть ты тресни, не срабатывает при загрузке телефона!

Я сделал самый примитив для проверки этой автозагрузки:
AndroidManifest.xml

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.alexrodionov.boottest"
    android:installLocation="internalOnly" >

    <uses-permission android:name="ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
MyReceiver.java

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

package ru.alexrodionov.boottest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Boot completed", Toast.LENGTH_LONG).show();
        context.startActivity(new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    }
}
MainActivity я так и оставил без изменений с текстом "Hello World".

Проверял на Android 4.0.4 и 4.2.2. Первый раз после установки Activity запускал перед перезагрузкой.
Причем если через консоль отправить
adb shell am broadcast -a android.action.intent.BOOT_COMPLETED ru.alexrodionov.boottest
то ресивер срабатывает, но как дело доходит до реальной перезагрузки - тишина.

Аватара пользователя
mkw
Сообщения: 2
Зарегистрирован: 04 авг 2015, 14:50

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение mkw » 21 авг 2015, 22:49

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

<receiver
            android:name=".receiver.BootUpReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

Ответить