it-swarm.com.ru

Как запустить Сервис, когда .apk установлен впервые

В моем Приложении у меня нет какой-либо части пользовательского интерфейса, поэтому мне нужно запустить Сервис, как только Приложение будет установлено на Устройство. Я видел много ссылок, из которых ответ был, что это невозможно, но я думаю, что это возможно. Просто взгляните на PlanB приложение на 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>
67
Lalit Poptani

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

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


UPDATE

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

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

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

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

oP будет неудачным, и ему нужно будет перепроектировать приложение, чтобы избежать этой предполагаемой "необходимости".

79
CommonsWare

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

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

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

Правка: имейте в виду, что разные версии Android размещают системные APK в разных местах. Например, Android 8 помещает их в /system/app//.apk. Зайдите в свое устройство, поищите и следуйте той же схеме, что и другие системные APK.

17
Jeffrey Blattman

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

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

Это потому, что все установленные приложения находятся в остановленном состоянии. В этом состоянии приложения не будут получать никаких трансляционных уведомлений.

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

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

14
inazaruk

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

5
Malcolm

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

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

5
Xiao

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

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

EDIT:

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

3
user370305

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

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

1
Anders8

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

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

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

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

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

1
kaspermoerch

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

1
test