Вопрос

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

Это было полезно?

Решение

Казалось бы, ваш лучший выбор - использовать 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> 

Другие советы

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

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

<activity android:name="MyActivity"
          android:label="@string/app_name"
          android:theme="@android:style/Theme.NoDisplay">

Я не уверен, будет ли работать сервис, но широковещательный приемник определенно не будет.URL-адреса запускаются с помощью startActivity().Широковещательные приемники не могут отреагировать на это.

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

ЗСТ:Обратите внимание, что, хотя класс Intent используется для отправки и получения этих широковещательных сообщений, механизм широковещательной передачи намерений здесь полностью отделен от намерений, которые используются для запуска действий с помощью Context.startActivity().У BroadcastReceiver нет возможности увидеть или зафиксировать намерения, используемые с помощью startActivity();аналогично, когда вы транслируете Намерение, вы никогда не найдете и не начнете какое-либо Действие.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top