我想在设备启动时启动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中工作,但不在真实设备上
答案 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