2011-11-02 72 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.