2012-07-02 29 views
0

我正在使用服務在引導完成後監聽廣播。但是,BroadcastReceiver在引導完成時沒有註冊。如果不是服務,我使用BroadcastReceiver來監聽啓動完成。它不會在我註冊服務時使用。我究竟做錯了什麼?代碼如下。啓動完成後,BroadcastReceiver服務中不工作

private BroadcastReceiver sim_change; 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(action); 

    sim_change = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getApplicationContext(), "Boradcast Receiver registered successfully", Toast.LENGTH_LONG).show(); 

     } 
    }; 

    registerReceiver(sim_change, filter); 

}@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    unregisterReceiver(sim_change); 
    Toast.makeText(getApplicationContext(), "Boradcast Receiver unregistered successfully", Toast.LENGTH_LONG).show(); 

} 
+0

你如何開始服務? –

+0

你使用哪個Anroid SDK?它的4.0? – user1089679

+0

從一個活動通過調用啓動服務 – Akhil

回答

0

你必須爲你的清單BOOT_COMPLETED註冊。從服務註冊它是沒有意義的,因爲該服務不會在啓動時運行以註冊它。

+0

是的我知道我試過,但事情是我想啓用廣播接收器,後來禁用它按鈕點擊 – Akhil

+0

我試過packagemanager,但它啓用廣播,但沒有diable它.. – Akhil

+0

@Akhil要使用'PackageManger'禁用/重新啓用接收器,您仍然在您的清單中註冊廣播,然後調用'setComponentEnabledSetting()'來更改其啓用。如果你無法正常工作,你應該發佈你的代碼,試圖完成它作爲另一個問題。這與您的代碼無法接收廣播完全無關。 –

0

您不能在Service之內註冊BOOT_COMPLETED,因爲重新啓動會刪除該註冊。

您必須從您的BroadcastReceiver開始。

處理啓用/禁用功能有很多種方法 - 使用建議的setComponentEnabledSetting(),或者只在應用程序的共享首選項中存儲值,您可以檢查服務何時啓動。