2014-01-10 138 views
0

(我還沒有發現以下問題在其他地方明確答覆,所以我會在這裏提問。)持久廣播接收器

我子類廣播接收器捕捉到新的照片被抓獲。這個子類工作得很好,但如果我的應用程序的進程沒有活動,我的自定義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

是的,我靜靜地定義了我的接收器,就像你的例子。但是,如果應用程序尚未啓動(例如設備啓動時),我的接收器似乎沒有收到intent-filter中指定的意圖。 – sl33nyc

+0

你確定你有意圖嗎?您的接收器是在它自己的類中定義的還是作爲NestedClass定義的?你聲明這些的方式稍有不同。你可以發佈任何日誌輸出?另外 - 確保一次運行你的應用程序,因爲android有一個安全功能,某些意圖(如啓動時)不會在沒有運行該應用程序的情況下工作。 –