2011-11-02 23 views
10

Manifest:Boot Receiver không làm việc

  <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> 

Receiver:

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(); 
    } 
} 

Receiver không hoạt động. Tôi tắt và trên thiết bị của tôi và không có gì xảy ra. SMS và cuộc gọi nhận trong dự án này hoạt động tốt. SMS Receiver và CallReceviver - hoạt động tốt. Bài đăng đầu tiên được cập nhật - thêm tệp kê khai đầy đủ.

Trả lời

47

Nếu bạn có thiết bị HTC, bạn cũng cần đăng ký "android.intent.action.QUICKBOOT_POWERON". Vì vậy, các mục trong manifest nên là:

<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>  

On HTC của tôi, nếu tôi tắt điện thoại và bật tính năng này trong một thời gian tôi đã QUICKBOOT_POWERON và không BOOT_COMPLETED.

Nếu tôi tắt thiết bị và tháo pin trong một thời gian - tôi đã nhận được BOOT_COMPLETED sau khi bắt đầu.

+0

wow, đây là một bài viết hữu ích! – slinden77

6

phép Đặt

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

Tôi có nó trong tệp kê khai. – user1021984

+2

Bạn đã đặt người nhận trong thẻ ứng dụng của tệp kê khai – Rasel

+0

tôi phải đặt thẻ nào? – user1021984

1

Hãy thử điều này ::

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

Cheers ... !!!

+0

Samsung A3 cần cờ "bật" và "đã xuất" để đặt thành true, nhưng trên Huawei 6P và 2 thiết bị khác, tôi nghĩ rằng các thiết bị đó được đặt thành true theo mặc định. Cảm ơn Rohit vì giải pháp :) –

3

Cũng biết rằng trong Android> = 3.1 ứng dụng được cài đặt ở trạng thái 'đã dừng' và sẽ không nhận được sự kiện khởi động và tắt máy cho đến khi người dùng 'làm điều gì đó' với ứng dụng ít nhất một lần. Xem this post on the topic.