Как запустить службу при загрузке устройства (автозапуск приложения и т. Д.)
Для первого: начиная с версии Android 3.1+ вы не получите BOOT_COMPLETE, если пользователь никогда не запускал ваше приложение хотя бы раз или пользователь "force"закрытое "приложение.Это было сделано для того, чтобы вредоносные программы автоматически не регистрировали сервис регистрацииЭта дыра в безопасности была закрыта в новых версиях Android.
Решение:
Создание приложения с активностью.Когда пользователь запускает его один раз, приложение может получить широковещательное сообщение BOOT_COMPLETE.
На секунду: BOOT_COMPLETE отправляется до монтирования внешнего хранилища.если приложение установлено во внешнее хранилище, оно не получит широковещательное сообщение BOOT_COMPLETE.
В этом случае есть два решения:
- Установка приложения во внутреннее хранилище
- Установите еще одно небольшое приложение во внутреннем хранилище.Это приложение получает BOOT_COMPLETE и запускает второе приложение на внешнем хранилище.
Если ваше приложение уже установлено во внутреннем хранилище, приведенный ниже код поможет понять, как запустить службу при загрузке устройства.
In Manifest.xml
Разрешение:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Зарегистрируйте свой BOOT_COMPLETED приемник:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Зарегистрируйте свой сервис:
<service android:name="org.yourapp.YourCoolService" />
В приемнике OnBoot.java:
public class OnBoot extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Create Intent
Intent serviceIntent = new Intent(context, YourCoolService.class);
// Start service
context.startService(serviceIntent);
}
}
Для HTC вам может понадобиться добавить в манифест этот код, если устройство не перехватывает RECEIVE_BOOT_COMPLETED:
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
Приемник теперь выглядит так:
<receiver android:name="org.yourapp.OnBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
Как проверить BOOT_COMPLETED без перезапуска эмулятора или реального устройства?Это просто.Попробуйте это:
adb -s device-or-emulator-id shell am broadcast -a android.intent.action.BOOT_COMPLETED
Как получить идентификатор устройства?Получить список подключенных устройств с идентификаторами:
adb devices
adb в ADT по умолчанию вы можете найти в:
adt-installation-dir/sdk/platform-tools
Наслаждайтесь!)