Как начать приложение только для Android-приложений - программирование
Подтвердить что ты не робот

Как начать приложение только для Android-приложений

Я создаю приложение, единственным компонентом которого является service, который продолжает работать в фоновом режиме (в основном прокси-сервер), но я не могу найти способ запуска этой службы. Приложение не может иметь никакого пользовательского интерфейса или взаимодействия с пользователем, поэтому я не использую Activity.
Broadcast receiver может слушать широковещательную рассылку BOOT, но как мне начать работу с первого раза, когда она установлена, и как я могу ее запустить? или есть трансляция, которую я могу слушать после того, как приложение установлено, например. может быть TIME_TICK, но это должно быть зарегистрировано из активности, я думаю.

4b9b3361

Ответ 1

К сожалению, сейчас нет надежного способа получения трансляционного события после установки вашего приложения, ACTION_PACKAGE_ADDED. Intent не транслирует к вновь установленному пакету.

Для получения события ACTION_BOOT_COMPLETED вам понадобится класс вещательного приемника, а также ваш сервис. Я бы также рекомендовал добавить ACTION_USER_PRESENT намерение быть пойманным этим широковещательным приемником, для этого требуется Android 1.5 (minSDK = 3), это вызовет ваш широковещательный приемник, когда пользователь разблокирует свой телефон. Последнее, что вы можете сделать, чтобы попытаться сохранить свою работу без автоматического ее отключения, - это вызвать Service.setForeground() в ваш сервис onCreate, чтобы сообщить Android, что ваша служба не должна останавливаться, это было добавлено главным образом для служб типа mp3-плееров, которые должны продолжать работать, но могут использоваться любой службой.

Убедитесь, что вы добавили правильные разрешения для событий boot_complete и user_present в манифестах.

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

package com.snctln.util.WeatherStatus;

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

public class WeatherStatusServiceReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction() != null)
        {
            if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
                intent.getAction().equals(Intent.ACTION_USER_PRESENT))
            {
                context.startService(new Intent(context, WeatherStatusService.class));
            }
        }
    }
};

Удачи.

Ответ 2

Возврат START_STICKY в Service.onStartCommand

Android перезапустит вашу службу

Ответ 3

Я исследую ту же проблему. Вот что я нашел: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Эта простая небольшая демонстрация демонстрирует решение, играя немного пинг-понга между BroadcatReceiver и службой. Получатель зарегистрирован для начала во время загрузки, зарегистрировавшись в манифесте, чтобы получить ACTION_BOOT_COMPLETED. Он просто запускает службу при получении ACTION_BOOT_COMPLETED. Служба, в свою очередь, регистрирует BroadcastReceiver, а затем для ACTION_TIME_TICK.

Логика приложения будет реализована в BroadcastReceiver.