2014-01-10 4 views
0

(я не нашел следующий вопрос явно в другом месте ответили, так что я спрошу здесь.)Persistent BroadcastReceiver

Я подклассы BroadcastReceiver захватить новые фотографии захвата. Этот подкласс отлично работает, но если процесс моего приложения неактивен, мой пользовательский BroadcastReceiver также не работает и, следовательно, не запускается при отправке релевантных намерений.

Какой рекомендуемый подход к постоянному (действительно, если мое приложение запущено) BroadcastReceiver? У меня складывается впечатление, что я должен использовать Услугу, но это мне не понятно, что происходит в моей службы, кроме:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY; 
} 

, который, я считаю, сохраняющуюся службы. В противном случае мне кажется странным, что BroadcastReceiver, на который фактически ссылается мой AndroidManifest.xml, не имеет ссылки в моей службе.

(На стороне записки, я другой пользовательские BroadcastReceiver, чья единственная цель состоит в том, чтобы начать вышеупомянутую службу при старте устройства. Спасибо, Android BroadcastReceiver on startup.)

+1

Вы динамической регистрации приемника? Я не совсем уверен, но я считаю, что вы можете статически определять приемники в вашем AndroidManifest, и я думаю, что это будет вести себя так, как вы планируете. –

+0

, если вы ставите вещательный приемник в манифестацию, в отпуске вы должны отменить регистрацию, чтобы таким образом больше не работать, поэтому хороший подход - использовать сервис. – Saqib

+0

Документы о том, что Saqib? Я не верю, что это так. –

ответ

2

Вы можете использовать намерений фильтров в манифесте к вызывают широковещательный приемник следующим образом:

<receiver android:name="MyReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
</receiver> 

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

Определите ваш приемник следующим образом:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, WordService.class); 
    context.startService(service); 
    } 
} 

Слегка editied из этого учебника:

http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html

+0

Да, я статически определяю свой приемник, как и ваш пример. Тем не менее, мой получатель, похоже, не получает намерения, указанного в фильтре намерения, если приложение не было запущено (например, при загрузке устройства). – sl33nyc

+0

Уверены ли вы, что у вас есть намерения? Определяется ли ваш приемник в его собственном классе или в виде NestedClass? То, как вы заявляете об этом, несколько отличается. Вы можете опубликовать любую запись в журнале? Кроме того, убедитесь, что вы запускаете приложение один раз, поскольку у Android есть функция безопасности, что определенные намерения (например, при загрузке) не будут работать без того, что приложение было запущено один раз. –