Запустить приложение Android без основного действия и запустить службу при запуске приложения

91

В моем приложении есть следующий сценарий. В моем приложении нет пользовательского интерфейса; вместо этого есть служба, которая запускается при загрузке и будет работать постоянно.

Как я могу настроить свой файл манифеста без основного действия? Могу ли я запустить приложение без активности? И при запуске моего приложения моя служба должна запуститься. Это возможно?

Я не хочу делать полупрозрачное Activity для запуска Сервиса.

Мехер
источник
взгляните на этот [вопрос] [1] [1]: stackoverflow.com/questions/4468006/…
Munish Kapoor 06

Ответы:

125

Вы сказали, что не хотите использовать полупрозрачное Activity, но, похоже, это лучший способ сделать это:

  1. В своем манифесте установите для темы Activity значение Theme.Translucent.NoTitleBar.
  2. Не беспокойтесь о макете для своей деятельности и не звоните setContentView().
  3. В своей деятельности onCreate()запустите службу с startService().
  4. Выйдите из Activity finish(), запустив службу.

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

Я настоятельно рекомендую показать хотя бы всплывающее уведомление, указывающее пользователю, что вы запускаете Службу или что она уже запущена. Очень плохо для пользователя иметь значок запуска, который ничего не делает, когда вы его нажимаете.

Даршан Ривка Уиттл
источник
2
после запуска моего приложения у меня появляется пустой экран. чего не должно быть ...
Мехер
1
@meher Я только что протестировал его, и он отлично сработал для меня - моя служба запустилась, и я не видел никаких действий, даже на мгновение. Пожалуйста, опубликуйте содержание onCreate () вашего Activity, и мы сможем понять, что не так.
Даршан Ривка Уиттл
когда я установил свое приложение в первый раз, я вижу, что активность запущена и разочарована через секунду.
Meher
открытый класс TestActivity расширяет Activity {/ ** Вызывается при первом создании действия. * / @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); Log.i («активность», «запуск службы»); startService (новое намерение (TestActivity.this, MyService.class)); финиш(); }}
Meher
1
Я понимаю, что это старый вопрос, но, похоже, он больше не работает. Изменение основной темы действия на Theme.Translucent.NoTitleBar или Theme.Translucent.NoTitleBar.FullScreen вызывает в противном случае работающее приложение, которое на короткое время показывает экран активности, на тот, который всегда вызывает сообщение «приложение перестало отвечать».
alzee
33

Да, вы можете сделать это, просто создав объект, BroadcastReceiverкоторый вызывает ваш Serviceпри загрузке приложения. Вот полный ответ, который я дал.
Android - запуск службы при загрузке

Если вам не нужны какие-либо значки / средства запуска для вашего приложения, вы также можете сделать это, просто не создавайте никаких действий с

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Просто объявите, Serviceкак обычно.

Лалит Поптани
источник
2
Похоже, что у спрашивающего все в порядке с запуском при Serviceзагрузке, но он хочет знать, как не иметь основного Activity, а просто убедиться, что Serviceон запускается при нажатии значка запуска.
Даршан Ривка Уиттл
2
Но похоже, что им нужен значок запуска, который при нажатии гарантирует, что служба работает. Ваше предложение просто избавляется от значка запуска.
Даршан Ривка Уиттл
@LalitPoptani, решение в порядке. Но моя служба не запускается, пока я не загрузу свой телефон.
Meher
4
Я не могу запустить свое приложение без MAIN, LAUNCHER в AndroidMenifest.xml, кроме SyncAdapter. Ваш ответ правда правдив?
sunghun
1
Я удалил фильтр намерений с тегами действий и категорий. Теперь приложение больше не работает в студии Android
Науман Эш
12

Причина создания приложения без активности или службы может заключаться в создании приложения Homescreen Widget, которое не нужно запускать.
После запуска проекта не создавайте никаких действий. После создания проекта просто нажмите «Выполнить». Android-студия скажет No default activity found.

Нажмите « Изменить конфигурацию» (из меню « Выполнить» ) и в части параметров запуска установите для параметра « Запуск» значение « Ничего» . Затем нажмите ОК и запустите приложение.

( Поскольку в программе запуска нет активности, приложение не будет отображаться в меню приложений. )

Махди-Мальв
источник
2
Спасибо, это был именно мой случай. Если вы не видите «Изменить конфигурацию», как я, выберите « Выполнить»> «Выполнить ...» в главном меню, а затем выберите « Изменить конфигурации ...» .
pm_
6

Android Studio версии 2.3

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

Сначала создайте проект в Android Studio без активности. Затем создайте свой класс службы и добавьте службу в свой AndroidManifest.xml.

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>

Теперь в раскрывающемся списке рядом с кнопкой «Выполнить» (зеленая стрелка) перейдите к «Редактировать конфигурации» и в «Параметры запуска» выберите «Ничего». Это позволит вам установить службу без жалоб Android Studio на отсутствие основного действия.

После установки служба НЕ будет запущена, но вы сможете запустить ее с помощью этой команды оболочки adb ...

am startservice -n com.whatever.myservice/.MyService

Можно проверить, работает ...

ps | grep whatever

Я еще не пробовал, но вы, вероятно, также можете автоматически запустить службу Android Studio. Это будет сделано в меню «Редактировать конфигурации».

Merc
источник
Я получаю следующую ошибку из оболочки adb: Запуск службы: Intent {cmp = com.example.wolk.myapp / .MyIntentService} Ошибка: не найдено; служба не запущена. LogCat показывает: ActivityManager: не позволяет начать ServiceInfo {274d8af com.example.wolk.myapp.MyIntentService
Трисмегист