AlarmReceiver 永远不会收到来自 Fragment 的调用
AlarmReceiver never receives a call from Fragment
我正在尝试在 Fragment 中设置闹钟。
AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(getActivity(), 0, alarmIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 23);
manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);
而我的 AlarmReceiver class 是:
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = "MainFragment";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive");
Toast.makeText(context, "I'm running", Toast.LENGTH_LONG).show();
}
}
此日志和 toast 从未显示。
在我的Android我的清单中
<receiver android:name=".AlarmReceiver"
android:enabled="true"
android:exported="true"></receiver>
我错过了什么吗?这是我在 Android 中的第一个项目,所以它可能是新手犯的错误。
您正在使用 PendingIntent.getService(...),而不是等效的 BroadcastReceiver PendingIntent.getBroadcast(...)。这可能是问题所在。
确保如果您设置了一次闹钟(比如在 App 首次启动时),并且在等待期间您对代码进行了一些更改并再次安装了该 App,您的待定 intent 不再处于活动状态,因此您需要设置闹钟再次.
这是经过测试的示例:
AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);
如果不行我可以把我做的工作项目发给你。
我正在尝试在 Fragment 中设置闹钟。
AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(getActivity(), 0, alarmIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 23);
manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);
而我的 AlarmReceiver class 是:
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = "MainFragment";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive");
Toast.makeText(context, "I'm running", Toast.LENGTH_LONG).show();
}
}
此日志和 toast 从未显示。
在我的Android我的清单中
<receiver android:name=".AlarmReceiver"
android:enabled="true"
android:exported="true"></receiver>
我错过了什么吗?这是我在 Android 中的第一个项目,所以它可能是新手犯的错误。
您正在使用 PendingIntent.getService(...),而不是等效的 BroadcastReceiver PendingIntent.getBroadcast(...)。这可能是问题所在。
确保如果您设置了一次闹钟(比如在 App 首次启动时),并且在等待期间您对代码进行了一些更改并再次安装了该 App,您的待定 intent 不再处于活动状态,因此您需要设置闹钟再次.
这是经过测试的示例:
AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this.getApplicationContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 3600, pendingIntent);
如果不行我可以把我做的工作项目发给你。