2012-07-02 30 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(),或者只在应用程序的共享首选项中存储值,您可以检查服务何时启动。