2011-11-02 74 views
10

清單:引導接收器不工作

  <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <activity android:name=".AlarmActivity" 
         android:label="@string/app_name"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
       </intent-filter> 
      </activity> 
      <receiver android:name="CallReciver"> 
       <intent-filter> 
        <action android:name="android.intent.action.PHONE_STATE"> 

</action> 
       </intent-filter> 
      </receiver> 
      <receiver android:name=".SmsReceiver"> 
       <intent-filter android:priority="1000"> 
        <action android:name= 
         "android.provider.Telephony.SMS_RECEIVED" /> 
       </intent-filter> 
      </receiver> 
      <receiver android:name=".OnBootReceiver"> 
      <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
      <service 
       android:enabled="true" 
       android:name=".AlarmService"> 
      </service> 
     </application> 
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.READ_PHONE_STATE"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.WRITE_SMS"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.READ_SMS"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.SEND_SMS"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.RECEIVE_SMS"> 
     </uses-permission> 
     <uses-permission android:name="android.permission.INTERNET"> 
     </uses-permission> 

接收機:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 
import android.widget.Toast; 

public class OnBootReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.d("Test","booot"); 
     Toast.makeText(context, "Test", Toast.LENGTH_LONG).show(); 
    } 
} 

接收機無法正常工作。我關掉了設備,沒有任何反應。 短信和呼叫接收器在這個項目工作良好。 短信接收器和CallReceviver - 效果很好。 第一篇文章更新 - 增加了完整的清單。

回答

47

如果你有HTC設備,你還需要註冊「android.intent.action.QUICKBOOT_POWERON」。因此,在清單中的條目應爲:

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

在我的HTC,如果我關閉設備並打開了一段時間我QUICKBOOT_POWERON並沒有BOOT_COMPLETED。

如果我關閉設備並取出電池一段時間 - 開始後我得到了BOOT_COMPLETED。

+0

哇,這是一個有用的職位! – slinden77

6

認沽權限

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

我有清單。 – user1021984

+2

您是否已將接收器放入清單的應用程序標籤 – Rasel

+0

我必須放置什麼標籤? – user1021984

1

試試這個::

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

乾杯... !!!

+0

三星A3需要將「啓用」和「導出」標誌設置爲true,但在華爲6P和其他兩款設備上,我認爲默認設置爲true。謝謝Rohit的解決方案:) –

3

還知道,在Android> = 3.1中,應用程序以「已停止」狀態安裝,直到用戶至少對應用程序執行一次操作爲止,纔會啓動和關閉事件。請參閱this post on the topic.