28

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

+0

Теперь я понимаю, что деятельность только GUI, и это их цель, поэтому я должен использовать службу или что-то другое. Спасибо, Isaac –

ответ

19

Ваш лучший выбор, казалось бы, использует 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 непосредственно в приложении Manifest без необходимости включать его в пределах деятельности:

<?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> 
+0

, пожалуйста, скажите мне, что такое MY_INTENT в _intent.getAction(). Equals (MY_INTENT), извините, если я наизусть, я просто новичок. –

+0

Вы можете использовать любую String, которую хотите определить для своих целей. Он должен быть уникальным. Я предлагаю вам использовать «your.package.name.START_SERVICE» –

4

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

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

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

3

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

93

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

В той же ситуации, что я должен был объявить тему Thusly:

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

Этот ответ должен иметь больше приоритетов, потому что он отвечает на точный вопрос, который был задан. Другие ответы очень верны, но на самом деле это очень полезно и отвечает на заданный вопрос. – prolink007

+5

Увы, я ответил хорошо после того, как он был опубликован, что, вероятно, объясняет, почему этого не произошло. Получил мне знак некроманта из сделки, а также ваш комментарий, который заставил меня улыбнуться :) – JoeHz

+1

Это правильный ответ ABSOLUTE, так как есть вещи, которые вы не можете сделать с BroadcastReceiver. В настоящее время я столкнулся с проблемой, используя USB-устройства. Использование приемника широковещательной передачи вместо активности заставляет приложение потерять разрешение при каждом отключении! – blender

 Смежные вопросы

  • Нет связанных вопросов^_^