2012-07-25 219 views
0

我在Android應用上工作,應該在通知欄中簡單地發佈關於電池的一些信息。我開始這個項目像所有建議的教程:獲取廣播接收器以使其活動活躍

  • 我創建了一個BroadcastReceiver。它處理UI的東西。
  • 然後我創建了一個IntentFilter的,只是什麼過濾 ACTION_BATTERY_CHANGED意圖
  • 然後,我只是註冊的IntentFilter和廣播接收器實例 我的主要活動的registerReceiver()方法。

它工作得很好,直到Activity(註冊了兩個)停止。通過停止我的意思,我按手機上的後退按鈕,我假設onStop()或/和onDestroy()方法被調用。

我的問題是,我怎麼能得到的BroadcastReceiver活動完成後運行,只有停止接收,當我'強制關閉'的應用程序?

UPDATE:

好了,從以前的答案我想,我需要做的,是從清單文件開始我BroadcastReciever,而不是從活動。這就是我試圖做的,但它根本沒有啓動recieving:

<receiver android:name="com.battery.indicator.BatteryReciever" android:enabled="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.BATTERY_CHANGED" ></action> 
    </intent-filter> 
</receiver> 

name屬性是全包路徑我Reciever類。 動作名稱是Eclipse的智能感知所發現的。所有這些都在xml的<application></application>部分。

我在做什麼錯?

回答

2

創建服務並在Manifest中註冊您的接收器。然後,即使您的應用目前關閉,Android也會喚醒並呼叫您的接收器。

+0

你能告訴我在哪裏做什麼?或者你能否提供一個鏈接,解釋你剛剛說的是什麼?這是我第一次與BroadcastReciever合作,而且我之前從未使用過服務,所以我不知道自己在做什麼。 – 2012-07-25 16:46:56

+0

查看這兩個鏈接:http://developer.android.com/guide/topics/manifest/receiver-element.html和http://thinkandroid.wordpress.com/2010/02/02/custom-intents-and-廣播與接收器/ – Kaediil 2012-07-25 17:12:20

0

如果您在清單(而不是代碼)中聲明您的BroadcastReceiver,並且讓接收引導程序完成,它將始終處於活動狀態。

這樣在您的清單文件:

 <receiver android:name=".BootReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

注意:你需要這個權限去做:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
+0

這將完全運行在應用程序之外,或者如果我強制關閉應用程序接收器關閉以及? – 2012-07-25 17:00:49

+0

如果您在處理BATTERY變更廣播之間沒有做任何事情,那麼您確實不需要啓動完成。您只需在發送這些消息時將其喚醒,並將廣播意圖過濾器添加到電池廣播清單中即可。否則,你只是在記憶中無所事事。現在我不記得的是,如果您的服務需要處於活動狀態才能將通知保留在通知欄中。那麼你可能需要這個。 – Kaediil 2012-07-25 17:37:10

0

我不知道這是否會幫助或沒有,但這裏我如何設置我的清單。

<manifest xmlns:android="http://schemas.android.com./apk/res/android" 
      package="com.namespace" 
      versionCode, etc> 

    //List permissions you use, looks like there is one for battery stats 
    <uses-permission android:name="android.permission.BATTERY_STATS" /> 

    <application> 
    <receiver android:name=".broadcast_recievers.BatteryReciever"> 
     <action android:name="android.intent.action.BATTERY_CHANGED" /> 
    </receiver> 
    </application> 
</manifest> 

主要的區別我想說明的是你在清單標籤申報項目名稱空間/包,然後申報路徑在接收器名稱的類。在我的例子中,我將有一個名爲BatteryReciever的類位於com.namespace.broadcast_recievers中。

您必須進行研究以確定您是否需要包含權限。這SO帖子暗示你沒有。