Как запустить службу, когда.apk устанавливается впервые
в моем приложении у меня нет никакой части пользовательского интерфейса, поэтому мне нужно запустить службу, как только приложение будет установлено на устройстве. Я видел много ссылок, из которых ответ был, что это невозможно, но я думаю, что это, безусловно, возможно. Просто взгляните на Планб приложение на Android Market, которое выполняет мое требование. Ниже приведен мой файл манифеста, как я пытался, но служба не была вызвана вообще. Итак, дайте мне знать, каков наилучший способ начать обслуживание когда приложение будет установлено.
обновление
Я также пробовал использовать android.intent.action.PACKAGE_ADDED
он отлично работает для обнаружения пакета для других приложений, но не для себя.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.auto.start"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:icon="@drawable/ic_launcher" >
<service android:name=".MyService">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</service>
<receiver android:name=".BootUpReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>
</manifest>
10 ответов:
к счастью, план B не работает на Android 3.1+, Как проверено на XOOM и Galaxy Nexus.
то, что делает план B, использует дыру в безопасности, которая может использоваться вредоносными программами drive-by, и именно поэтому Android больше не позволяет этому происходить.
обновление
чтобы уточнить: как иназарук опубликовал, и я поставил в комментарии к другим ответам, все приложения после установки помещаются в "остановленное" состояние. Это же укажите, что приложение завершается после того, как пользователь принудительно останавливает приложение из приложения настроек. Находясь в этом" остановленном " состоянии, приложение не будет запускаться ни по какой причине, кроме ручного запуска действия. Примечательно, что нет
BroadcastReceviers
будет вызываться, независимо от события, для которого они зарегистрированы, пока пользователь не запустит приложение вручную.этот блок охватывает сценарий плана B удаленной установки и запуска, который они использовали ранее. В конце концов, при этом любой, у кого есть взломанная учетная запись Google, рискует заразиться своим устройством, так сказать, без рук.
Итак, когда ОП говорит:
Мне нужно запустить службу, как только приложение будет установлено на устройстве
операция будет неудачной и нужно перепроектировать приложение, чтобы избежать этого якобы "нужно".
приложения, установленные в разделе / system, не подлежат переводу в состояние "остановлено" после установки. Если у вас есть root, вы можете сделать,
$ adb root $ adb remount $ adb push your.apk /system/app
и оно может немедленно получить намерения передачи. Это, конечно, не обеспечивает решение общего назначения, но я хотел бы упомянуть об этом для полноты.
Я согласен с ответом CommonsWare на вопрос:Как запустить службу android при установке. Другими словами, вы не можете автоматически запустить службу после того, как вы только что были установлены.
еще одна вещь о новых платформах Android: если у вас нет пользовательского интерфейса вообще, у вас будут проблемы с запуском службы даже при использовании
BOOT_COMPLETE
умысла на Android 3.1+.это потому, что все установленные приложения находятся в остановленном состоянии. В этом состоянии приложения не будут получать никаких широковещательных уведомлений.
для активации вашего приложения необходимо, чтобы какое-либо другое приложение (или пользователь) запустило вашу службу или деятельность, или контент-провайдера. Обычный рабочий процесс, когда пользователь нажимает на значок приложения.
Я написал подробные объяснения по этому поводу в моем блоге.
план B делает этот запуск, слушая события, которые происходят в системе. Он использует приемник, который буквально слушает сотни событий, надеясь, что некоторые из них в конечном итоге загорятся. Так вот как вы можете это сделать. В противном случае нет встроенных средств для запуска приложения, как только оно будет установлено.
Я не уверен, что ваши ограничения/цель, но если вы можете установить другое приложение, которое имеет активность вы можете отправить намерениях с флагом FLAG_INCLUDE_STOPPED_PACKAGES.
Это будет использовать ваше приложение для разрешения намерений, даже если оно находится в остановленном состоянии. Если действие намерения соответствует одному из ваших фильтров, оно также выведет пакет из остановленного состояния.
Я не думаю, что вы можете начать обслуживание сразу после установки приложения на устройстве,
приложение должно быть сначала вызвано пользователем через какой-то
Activity
.Единственное, что вы должны зарегистрировать некоторыеBroadcast Receiver
с соответствующими намерениями в манифесте, которые вызывают вас сервис, когда что-то происходит на устройстве, но это remaing для Android 3.1 версии.EDIT:
после Android 3.1+ вперед вы не можете использовать любой
Broadcast
для запуска приложения, потому что все приложения остаются в неактивном состоянии после завершения загрузки устройства и для запуска приложения пользователь должен вызвать его.(Коснувшись значка приложения).
как указано CommonsWare в ответ на этот вопрос (который я предполагаю, что вы все уже видели, но решили игнорировать) запуск службы при установке невозможен - это просто не то, что реализовано в платформе.
запустить его автоматически при следующей загрузке, однако возможны.
как указано в технических деталях для PlanB:
план B попытается запустить, как только он загрузится, но в некоторых случаи вам нужно будет отправить SMS, чтобы начать его.
Я предполагаю, что на корневом телефоне вы может начать
Service
при установке - но нет никакой гарантии, что телефон укоренен, поэтому PlanB потребует получения текста в некоторых случаях, потому что это может быть зарегистрированоIntentFilter
приложения и затем используется для запускаService
.
есть приложение на google play Android Потеряла которые вызывают службу регистрации для Google push-сообщений через входящее sms без запуска приложения даже один раз для версии 3.0+.
возможно, лучший способ достичь этого (и теперь я говорю о конкретном намерении OP, программе, которая устанавливается для извлечения украденного телефона, а не общего вопроса) - это социальная инженерия, а не разработка программного обеспечения.
таким образом, значок с текстом, таким как "список паролей" или "мои банковские счета", который внезапно появился на главном экране, несомненно, будет нажат. Посмотрите на успех всех видов другого фишинга, и здесь вы будете нацелены на вора, кто уже мотивирован продолжать гнусную деятельность. Пусть вор начнет его для вас. :)