我试图让我的广播接收器在启动后立即运行。从我所知道的广播接收器将运行而不管重启,我刚刚了解到,但我的问题是我已将它设置为每晚午夜运行而我不想等到午夜运行它一旦失败的目的。但我需要它在重启一次后立即运行。但它没有运行。有人能看出我做错了吗?我在Galaxy S4和S6上尝试这个并且没有得到日志消息,说明它已重新启动。
这是我的Manifest文件,因为您可以看到它是必要的权限。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".StartActivityAtBootReceiver"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
在我的StartActivityAtBootReceiver中,我有onReceive调用主活动,它将启动广播接收器。
public void onReceive(Context context, Intent intent) {
Log.e("LOGS", "Start Activity after Rebooted ");
Intent rebootIntent = new Intent(context, MainActivity.class);
rebootIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(rebootIntent);
}
在我的MainActivity中,我有以下内容在另一个扩展广播接收器的类中调用广播接收器。
//run from boot or from button on screen
protected void runFromOutside() throws ParseException {
checkIfStartingNow();
startTheClock();
finish(); //close the app/view
}
//check if starting now pops up message to state that it is staring now
protected void checkIfStartingNow() throws ParseException {
//does some checks and displays a message popup
}
protected void startTheClock() {
// Set the alarm to run at midnight every night
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 00);
//calendar.set(Calendar.MINUTE, 01);
// Get the AlarmManager Service
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
// Create an Intent to broadcast to the Shhh
mNotificationReceiverIntent = new Intent(MainActivity.this, Shhh.class);
// Create an PendingIntent that holds the NotificationReceiverIntent
// mNotificationReceiverPendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, mNotificationReceiverIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mNotificationReceiverPendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, mNotificationReceiverIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//Set repeating alarm that checks every minute.
mAlarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, mNotificationReceiverPendingIntent);
// set true for alarm
settings.edit().putBoolean(NotificationOn, true).apply();
Log.e("LOGS", "Entered Start the midnight alarm");
}
答案 0 :(得分:1)
好的所以我弄清楚了,它不起作用的原因是因为<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
不在Android Manifest文件中的正确位置,所以最后我不得不将它移到{{{ 1}}标签(放置它的正确位置),然后重启工作。因此,请确保您在Android Manifest文件中拥有正确的XML布局,因为我学到了很难,因为它可能会对您的应用造成严重破坏。
application
位于<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
标记内,因此无效。很重要。希望这有助于将来的其他人。因此,请确保您的XML标记位于正确的位置。