Как запустить Сервис, когда .apk установлен впервые - PullRequest
67 голосов
/ 16 декабря 2011

В моем Приложении у меня нет какой-либо части пользовательского интерфейса, поэтому мне нужно запустить Службу, как только Приложение будет установлено на Устройство. Я видел много ссылок, из которых ответ был, что это невозможно, но я думаю, что это возможно. Просто взгляните на приложение PlanB на Android Market, которое отвечает моим требованиям. Ниже мой файл манифеста, как я пытался, но служба не была вызвана вообще. Итак, дайте мне знать, как лучше всего запустить Службу после установки приложения.

UPDATE

Я также пытался использовать 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 ]

78 голосов
/ 16 декабря 2011

К счастью, Plan B не работает на Android 3.1+, как было протестировано на XOOM и Galaxy Nexus.

В плане B используется дыра в безопасности, которую может использовать вредоносная программа, распространяемая с диска, именно поэтому Android предотвращает ее появление.


UPDATE

Чтобы уточнить: поскольку Иназарук опубликовал и я комментировал другие ответы, все приложения после установки переводятся в состояние «остановлено». Это то же состояние, в котором приложение закрывается после принудительной остановки приложения из приложения «Настройки». Находясь в этом состоянии «остановлено», приложение не будет работать по любой причине, кроме как при ручном запуске действия. Примечательно, что BroadcastReceviers не будет вызываться независимо от события, для которого они зарегистрированы, пока пользователь не запустит приложение вручную.

В этом блоке описан сценарий удаленной установки и запуска Plan B, который они использовали ранее. В конце концов, любой, у кого есть взломанная учетная запись Google, рискует заразить свое устройство без помощи рук.

Итак, когда ОП говорит:

Мне нужно запустить Сервис, как только приложение Applicaton будет установлено на устройстве

Операция будет неудачной и потребуется изменить дизайн приложения, чтобы избежать этой предполагаемой «необходимости».

17 голосов
/ 07 января 2012

Приложения, установленные в разделе / ​​system, не подлежат переводу в состояние «остановлено» после установки.Если у вас есть root, вы можете сделать,

$ adb root
$ adb remount
$ adb push your.apk /system/app

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

РЕДАКТИРОВАТЬ: Имейте в виду, что разные версии Android размещают системные APK в разных местах.Например, Android 8 помещает их в /system/app//.apk.Зайдите в свое устройство, поищите и следуйте той же схеме, что и для других системных APK.

14 голосов
/ 16 декабря 2011

Я согласен с ответом CommonsWare на вопрос: Как запустить службу Android при установке . Другими словами, вы не можете автоматически запускать свой сервис после того, как вы только что были установлены.

Еще одна вещь о новых платформах Android: если у вас вообще нет пользовательского интерфейса, у вас будут проблемы с запуском службы даже при использовании намерения BOOT_COMPLETE на Android 3.1+.

Это потому, что все установленные приложения находятся в остановленном состоянии. В этом состоянии приложения не будут получать ЛЮБЫЕ широковещательные уведомления.

Чтобы активировать ваше приложение, какое-то другое приложение (или пользователь) должно запустить вашу службу или деятельность, или поставщика контента. Обычный рабочий процесс - это когда пользователь нажимает на значок вашего приложения.

Я написал подробные объяснения по этому поводу в своем блоге .

5 голосов
/ 30 июля 2013

Я не уверен, каковы ваши ограничения / цели, но если вы можете установить другое приложение, у которого есть действие, вы можете отправить ему намерение с флагом FLAG_INCLUDE_STOPPED_PACKAGES .

Это будет использовать ваше приложение для разрешения намерений, даже если оно находится в остановленном состоянии. Если действие намерения соответствует одному из ваших фильтров, оно также выведет пакет из состояния остановки.

5 голосов
/ 16 декабря 2011

План B делает этот запуск, слушая события, которые происходят в системе.Он использует приемник, который буквально слушает сотни событий, надеясь, что некоторые из них в конечном итоге сработают.Вот как вы можете это сделать.В противном случае нет встроенных средств для запуска приложения сразу после его установки.

3 голосов
/ 16 декабря 2011

Я так не думаю. Вы можете запустить сервис сразу после установки приложения на устройство,

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

EDIT:

После Android 3.1 + и выше вы не можете использовать Broadcast для запуска приложения, поскольку все приложение остается в неактивном состоянии после завершения загрузки устройства и для запуска приложения пользователь должен вызвать его. . (Касаясь значка приложения).

1 голос
/ 01 августа 2013

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

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

1 голос
/ 25 июля 2013

в google play есть приложение Android Lost , которое вызывает службу регистрации для push-сообщений google через входящие смс без запуска приложения ни разу для версии 3.0+.

1 голос
/ 16 декабря 2011

Как указано CommonsWare в ответ на этот вопрос (который, я полагаю, вы все уже видели, но решили проигнорировать), запуск службы при установке невозможен - это просто не то, что внедрен в платформу.

Однако автоматический запуск при следующей загрузке возможен.

Как указано в Технических деталях для PlanB:

План B попытается запустить сразу после загрузки, но в некоторых случаях вам потребуется отправить SMS, чтобы начать его.

Я предполагаю, что на рутованном телефоне вы могли бы иметь возможность запустить Service при установке - но нет гарантии, что телефон рутирован, поэтому PlanB потребует получения текста в в некоторых случаях это может быть зарегистрировано IntentFilter приложения, а затем использовано для запуска Service.

0 голосов
/ 29 ноября 2017

ЭЙ Я думаю, что использование BroadcastRecivier для автоматического запуска приложения при перезагрузке устройства, следовательно, оно автоматически запустится при запуске устройства. Надеюсь, это поможет

...