BOOT_COMPLETED未在设备中调用

时间:2015-01-22 11:01:41

标签: android android-broadcast android-reboot

我想在设备启动时启动alram,因为我已经完成了以下操作

1)用户许可

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

2)在清单文件中添加具有意图动作的接收器

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

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

3)来源

public class BootReceiver extends BroadcastReceiver {

    private AlarmManager dayAlarmMgr;
    private PendingIntent dayAlarmIntent;
    private NotificationManager mNotificationManager;
    private NotificationCompat.Builder builder;
    private Context context;
    public static final int NOTIFICATION_ID = 2;

    @Override
    public void onReceive(Context context, Intent intent) {

         if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
                    Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
           }
    }
}

上面的代码在genymotion中工作,但不在真实设备上

5 个答案:

答案 0 :(得分:2)

感谢您的帮助,但最终我能够通过将android.intent.action.BOOT_COMPLETED设置为内存中存储的应用程序的启动完成火来使其工作android:installLocation="internalOnly"

答案 1 :(得分:1)

问题是android:name=".sms.BootReceiver",它应该是android:name=".BootReceiver"。但有些设备无法抓住BOOT_COMPLETED。您的intent-filter应该如下:

<intent-filter>
   <action android:name="android.intent.action.BOOT_COMPLETED" />
   <action android:name="android.intent.action.QUICKBOOT_POWERON" />
   <action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>

不要忘记编辑你的来源:

if ((intent.getAction().equals("android.intent.action.BOOT_COMPLETED") 
   || intent.getAction().equals("android.intent.action.QUICKBOOT_POWERON")
   || intent.getAction().equals("com.htc.intent.action.QUICKBOOT_POWERON"))){
      Toast.makeText(context, "FIRED BOOT COMPLETE" , Toast.LENGTH_LONG).show();
}

答案 2 :(得分:0)

  android:name=".sms.BootReceiver"

而不是使用

android:name=".BootReceiver"

或者

android:name="complete.packagename.sms.BootReceiver"

希望这能解决您的问题。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

确保您已经在应用程序中存在一项活动。从Android 3.1开始,在用户手动启动活动之前,BroadcastReceiver将无法工作,这是为了提供安全性。一旦用户第一次运行应用程序,那么您的BroadcastReceiver将始终运行,除非它没有强制停止它。一旦首次启动活动,您的广播接收器即使在重启后也会运行。

在模拟器上它正在工作 - 可能是因为它运行在低于​​3.1的版本而真实设备运行高于3.1