Rav*_*eja 1 android broadcastreceiver alarmmanager android-pendingintent android-broadcast
这就是我创建闹钟的方式.当应用程序仍在后台运行时,会触发警报.但是当它从最近的应用程序中清除时,警报就会被丢弃.我正在注册一个新的接收器并提供一个独特的动作来区分两个警报.我的代码中是否有任何错误.
String filter_action = "myPackageName" + request_code_value +"_time";
IntentFilter filter = new IntentFilter(filter_action);
registerReceiver(new AlarmReciever(), filter);
Intent intent = new Intent(filter_action);
intent.putExtra(getString(R.string.get_current_intent_value), request_code_value);
intent.putExtra(getString(R.string.alarmtext), alarm_title);
intent.putExtra(getString(R.string.alarm_time), newAlarm_Choose_Alarm_Value.getText().toString());
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, request_code_value, intent, 0);
calSet.setTimeInMillis(timeInMillis);
if (calSet.compareTo(calNow) <= 0) {
// Today Set time passed, count to tomorrow
calSet.add(Calendar.DATE, 1);
}
alarmManager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
清单文件.
<receiver android:name="com.bigbangpartners.YoWakeUp.activities.AlarmReciever" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="AlarmManager_Start" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
请帮我.提前致谢.
如果您BroadcastReceiver在Activitys中以编程方式注册和取消注册,那么BroadcastReceiver只要应用程序进程处于活动状态,以这种方式创建的内容将保持存在.因此,当您从最近的应用列表中删除您的应用时,BroadcastReceiver实际上也会销毁此应用.
另一方面,BroadcastReceiver清单中注册的是Android应用程序的全局永久组件,无论应用程序进程是否存在,它都将永远存在.
如果您希望即使应用程序不在前台也可以激活警报,那么您需要BroadcastReceiver在应用程序清单中注册并指定警报操作.你不这样做,我相信这是你问题的根源.
你应该做什么:
1.BroadcastReceiver像这样定义你的清单:
<receiver android:name="com.bigbangpartners.YoWakeUp.activities.AlarmReciever" >
</receiver>
Run Code Online (Sandbox Code Playgroud)
2.删除所有来电registerReceiver()和unRegisterReceiver()在你的应用程序代码是没有必要的.
3.Intent像这样定义你的警报:
Intent intent = new Intent(this, AlarmReceiver.class);
Run Code Online (Sandbox Code Playgroud)
其余代码保持不变.首先尝试这个,看看它是否有效.