Android-запуск службы во время загрузки
Мне нужно запустить сервис во время загрузки. Я много искал. Они говорят о Broadcastreceiver. Поскольку я новичок в разработке Android, я не получил четкой картины об услугах на Android. Укажите исходный код.
- Как записывать файлы в папку с ресурсами или необработанную папку в Android?
- Как использовать скольжение для загрузки изображения в bitmap?
- Android - redirect на сохранение, если приложение не установлено (запуск с веб-сайта)
- широковещательный приемник не получит событие камеры
- проверить приложение Android на переднем плане или нет?
- Как установить apk на эмулятор в Android Studio?
- ListView OnItemClickListener не отвечает?
- Как проверить видимость программной клавиатуры в Android?
Создайте BroadcastReceiver
и зарегистрируйте его для получения ACTION_BOOT_COMPLETED . Вам также необходимо разрешение RECEIVE_BOOT_COMPLETED .
Чтение: прослушивание и широковещание глобальных сообщений и настройка сигналов тревоги
Ваш приемник:
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, YourService.class); context.startService(myIntent); } }
Ваш AndroidManifest.xml:
?
Вы можете зарегистрировать свою собственную службу приложений для автоматического запуска, когда устройство было загружено. Вам это нужно, например, когда вы хотите получать push-события с http-сервера и хотите сообщить пользователю, как только произойдет новое событие. Пользователю не нужно запускать действие вручную до начала работы службы …
Это довольно просто. Сначала дайте своему приложению разрешение RECEIVE_BOOT_COMPLETED. Затем вам нужно зарегистрировать BroadcastReveiver. Мы называем это BootCompletedIntentReceiver.
Теперь ваш Manifest.xml должен выглядеть так:
В качестве последнего шага вам необходимо реализовать приемник. Этот приемник только начинает ваш фоновый сервис.
package com.jjoe64; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import com.jjoe64.BackgroundService; public class BootCompletedIntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { Intent pushIntent = new Intent(context, BackgroundService.class); context.startService(pushIntent); } } }
С http://www.jjoe64.com/2011/06/autostart-service-on-device-boot.html
В большинстве решений, размещенных здесь, отсутствует важная часть: выполнение этого без блокировки следа приводит к риску того, что ваша Служба будет убита до того, как она будет завершена. Увидел это решение в другом streamе, отвечая здесь также.
Сначала вам необходимо установить блокировку слежения. К счастью, библиотека поддержки дает нам class для этого:
public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This is the Intent to deliver to our service. Intent service = new Intent(context, SimpleWakefulService.class); // Start the service, keeping the device awake while it is launching. Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); startWakefulService(context, service); } }
то в своей службе убедитесь, что вы освободили блокировку слежения:
@Override protected void onHandleIntent(Intent intent) { // At this point SimpleWakefulReceiver is still holding a wake lock // for us. We can do whatever we need to here and then tell it that // it can release the wakelock. ... Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); SimpleWakefulReceiver.completeWakefulIntent(intent); }
Не забудьте добавить разрешение WAKE_LOCK и зарегистрировать получателя в манифесте:
...
вы должны зарегистрироваться для BOOT_COMPLETE, а также REBOOT
Также зарегистрируйте свою созданную службу в манифесте и используйте-разрешить как
а затем в лифчике-приемнике звоните в службу поддержки
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent myIntent = new Intent(context, MyService.class); context.startService(myIntent); } }
Сначала зарегистрируйте получателя в файле manifest.xml:
а затем записать трансляцию для этого приемника, например:
public class Broadcast_PowerUp extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_POWER_CONNECTED)) { Toast.makeText(context, "Service_PowerUp Started", Toast.LENGTH_LONG).show(); } else if (action.equals(Intent.ACTION_POWER_DISCONNECTED)) { Toast.makeText(context, "Service_PowerUp Stoped", Toast.LENGTH_LONG) .show(); } } }