2013-04-02 17 views
0

您好我正在開發android應用程序,我正在定義一個廣播接收器。我從我的活動中調用接收器。我定義廣播接收機是這樣的:廣播接收器只有在設備重啓時纔有效android

public class MyScheduleReceiver extends BroadcastReceiver { 

    private static final long REPEAT_TIME = 100 * 5; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("RRRRRRRRRRRRRRRRRRRRRRRR", "on receive"); 

    } 
} 

在我定義這樣的Android清單文件:

<receiver android:name="abc.xyz.MyScheduleReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

,並在主要活動中,我打電話給我的廣播接收機是這樣的:

//in activity oncreate 
startService(new Intent(this, MyScheduleReceiver.class)); 

我的問題是,當呼叫啓動服務時,它實際上並沒有啓動我的服務。但是,當我重新啓動我的設備時,它開始我的服務,因爲我給了意向過濾器「BOOT_COMPLETED」。當我打電話開始服務時,我想要做的事情我的服務必須開始,

我做錯了什麼。如何解決這個問題呢?

回答

1

你要麼很困惑,要麼你的問題不是很好。清單中的內容(以及Android的工作原理)是,當BOOT_COMPLETED發生時,它將調用您定義的BroadcastReceiver。它不會自動啓動一項活動或服務。如果你想這樣做,你需要在你的接收器的onReceive函數中調用startService或startActivity。

您不啓動BroadcastReceivers。你開始服務,這是長期的後臺進程。您註冊BroadcastReceivers以通知特殊事件(如BOOT_COMPLETED)。當您註冊的事件之一發生時,它將創建該類的一個實例並調用其onReceive。

希望能夠解決問題。如果沒有,我建議你重讀一些關於服務和廣播接收器的教程,你似乎有兩個困惑。

1

startService調用只會啓動服務。這裏的MyScheduleReceiver是一個braodcast接收器。要觸發廣播接收器,通常必須發送廣播,而不是調用startService。

3

實際發生的情況是,您可以在啓動活動時啓動廣播接收器,並且此廣播接收器開始監聽BOOT_COMPLEATED正在發生與否。當這種情況發生時,它就會被接受。如果您需要啓動後臺進程,則可以使用由BroadcastReciever管理的服務。 BroadcastRecievers用於偵聽通過一些這方面的事件happen.Go,它會幫助你

Services

BroadcastReceiver

0

開始,你需要發送廣播消息,不startService()

添加此代替廣播的startService(new Intent(this, MyScheduleReceiver.class));

Intent intent = new Intent(); 
intent.setAction("pakagename.MyScheduleReceiver"); 
sendBroadcast(intent); 

我希望他能LPS。