Активность Android без графического интерфейса - PullRequest
29 голосов
/ 08 февраля 2009

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

Ответы [ 4 ]

96 голосов
/ 25 июня 2011

Повторяя предыдущий ответ, вы не должны использовать широковещательный приемник.

В той же ситуации я объявил тему таким образом:

<activity android:name="MyActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.NoDisplay">
19 голосов
/ 09 февраля 2009

Казалось бы, ваша лучшая ставка - BroadcastReceiver. Вы можете создать новый BroadcastReceiver, который прослушивает Намерение, чтобы инициировать ваше уведомление и запустить службу следующим образом:

public class MyIntentReceiver extends BroadcastReceiver {    
  @Override 
  public void onReceive(Context _context, Intent _intent) {
    if (_intent.getAction().equals(MY_INTENT)) {
      // TODO Broadcast a notification
      _context.startService(new Intent(_context, MyService.class));
    }
  }    
}

И вы можете зарегистрировать этот IntentReceiver непосредственно в манифесте приложения без необходимости включать его в действие:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.domain.myapplication">
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <service android:enabled="true" android:name="MyService"></service>
    <receiver android:enabled="true" android:name="MyIntentReceiver">
      <intent-filter>
        <action android:name="MY_INTENT" />
      </intent-filter>
    </receiver>
  </application>
</manifest> 
4 голосов
/ 06 августа 2010

Я не уверен, что служба будет работать, но приемник вещания определенно не будет. URL запускаются с помощью startActivity (). Приемники вещания не могут ответить на это.

http://developer.android.com/reference/android/content/BroadcastReceiver.html

FTA: Обратите внимание, что хотя класс Intent используется для отправки и получения этих широковещательных сообщений, механизм широковещательной рассылки здесь полностью отделен от Intents, которые используются для запуска операций с Context.startActivity (). BroadcastReceiver не может увидеть или захватить Intents, используемый с startActivity (); аналогично, когда вы транслируете Намерение, вы никогда не найдете или не начнете Активность.

3 голосов
/ 29 декабря 2010

Воспользуйтесь сервисом. Я работаю определенно. Когда вы нажимаете на программу, она будет работать без графического интерфейса. Используйте pendintgintent ... getService (MySerice.class ....). Затем создайте новый класс MyService, расширяющий класс Service. Внутри MyService.class переопределите onStart () и делайте все, что хотите.

...