2012-12-19 82 views
0

我需要創建一個BroadcastReceiver,每次設備啓動時立即執行某些任務。另外,當點擊某個按鈕時,接收器應該在啓動時停止啓動。有人可以幫我管理嗎?android註冊一個永久廣播接收器

+0

你有什麼試過?有很多的問題,例如:http://stackoverflow.com/questions/2784441/trying-to-start-a-service-on-boot-on-android – qzikl

+0

問題是當點擊某個按鈕時停止BroadcastReceiver 。這個特定按鈕是在你的應用程序還是其他的? –

+0

我的應用程序只。謝謝你們,Ralgha的解決方案似乎工作 – Droidman

回答

3

所有你需要解決你的問題的第一部分是讓BroadcastReceiver它在聲明它的表現爲:

<receiver android:name=".MyBootReceiver" 
     android:enabled="true" 
> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    </intent-filter> 
</receiver> 

QUICKBOOT_POWERON是必要的,有些設備不發BOOT_COMPLETED廣播。 HTC設備喜歡使用quickboot之一。

對於問題的第二部分,有幾種不同的方法可以實現這一點。您可以簡單地設置SharedPreferences中的值,以便接收機在每次觸發時都會進行檢查,如果該值指示,則立即退出。

您還可以禁用代碼接收器:

getPackageManager().setComponentEnabledSetting( 
    new ComponentName(this, MyBootReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
     PackageManager.DONT_KILL_APP); 

您可以用同樣的方法打開它:

getPackageManager().setComponentEnabledSetting( 
    new ComponentName(this, MyBootReceiver.class), 
     PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
     PackageManager.DONT_KILL_APP); 

我不能確定這種方法的持久性。我在我的一個應用程序中使用它,但它不適用於引導接收器,它不必在靴子中保留。如果你想要走這條路線,你必須試驗一下。

+0

謝謝,我會試試看! – Droidman