我的目标是为每个事件发出警报,eventsDb.getFavouriteEvents()但每次事件只发射一次.
在我看来,它可能是由设置引起的PendingIntent.FLAG_UPDATE_CURRENT,但是我需要这个标志来发布具有意图的额外内容.有没有办法不设置这个标志,仍然有意图发布Extras?
我存储PendinIntents在Collection(pendingIntents)中因为我在onDestroy()这个Service类中取消它们.
这是来自的代码onCreate():
for(Event event : eventsDB.getFavouriteEvents()) {
Intent intent = new Intent(AlarmReciever.ONCOMING_EVENT);
intent.putExtra(Event.TITLE, event.getTitle());
PendingIntent pendingIntent = PendingIntent.getBroadcast(EventAlarmService.this, 0, intent,
Intent.FLAG_GRANT_READ_URI_PERMISSION | PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, event.getTime(), pendingIntent);
pendingIntents.add(pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
以下代码显示通知并发送int数据,但在其他活动中getExtras()返回null.为什么?
int notificationID = 1;
NotificationManager nm = (NotificationManager) getSystemService(getApplicationContext().NOTIFICATION_SERVICE);
Intent i = new Intent(getApplicationContext(), DownlodResult.class);
i.putExtra("notificationID", 1);
PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);
CharSequence tickerText = "There are updates !";
long when = System.currentTimeMillis();
int icon = R.drawable.ic_launcher;
Notification notification = new Notification(icon,tickerText,when);
CharSequence contentTitle = "There are updates";
CharSequence contentText = "Please click here to view it";
notification.setLatestEventInfo(getApplicationContext(), contentTitle, contentText, contentIntent);
notification.vibrate = new long[] { 100, 250, 100, 500}; // Needs vibrate …Run Code Online (Sandbox Code Playgroud) 什么是pendingIntentandroid?什么时候应该使用它?,我试着在android文档中阅读它,但不幸的是我没有得到答案!
问题是我想延迟重复警报的第一次火灾.例如,我希望这个待处理的意图在点击10分钟之后不能立即工作,怎么做?
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Main.this, ReportService.class);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar c = Calendar.getInstance();
PendingIntent pendingIntent = PendingIntent.getService(Main.this, 0, intent, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 112500, pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
此setInnexactRepeating中的第二个参数名为triggerAtMillis来自Android开发人员指南:triggerAtMillis使用适当的时钟(取决于警报类型),警报应首先关闭的时间(以毫秒为单位).这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟.
我改变它,它总是从点击开始,没有延迟,任何帮助?
java android android-service android-alarms android-pendingintent
我有一个BroadcastReceiver叫AlarmReceiver那个ToastS"报警工作".我试图在5:45和17:30 设置一个重复PendingIntent触发器AlarmReceiver,但是在启动应用程序几秒钟后我看到"警报工作".为什么PendingIntent立刻发送?
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calendar cal1 = Calendar.getInstance();
cal1.set(Calendar.HOUR_OF_DAY, 05);
cal1.set(Calendar.MINUTE, 45);
cal1.set(Calendar.SECOND, 00);
Calendar cal2 = Calendar.getInstance();
cal2.set(Calendar.HOUR_OF_DAY, 17);
cal2.set(Calendar.MINUTE, 30);
cal2.set(Calendar.SECOND, 00);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(),cal2.getTimeInMillis(), pi);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
}
}
Run Code Online (Sandbox Code Playgroud)
AlarmReceiver:
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context …Run Code Online (Sandbox Code Playgroud) 当我广播挂起的意图并通过 提供我的数据时putExtra(),我在接收器中使用相同的数据获取这些意图,这等于第一个创建的挂起意图。代码 :
for (int i = 0; i < parts.size(); i++) {
mSendIntent=new Intent("CTS_SMS_SEND_ACTION");
mSendIntent.putExtra("key",i):
sentIntents.add(PendingIntent.getBroadcast(smscontext, 0, mSendIntent,
0));
}
Run Code Online (Sandbox Code Playgroud)
我尝试通过向getBroadcast方法添加一些标志来获得结果,但没有成功,知道吗?
我已安排每天上午10点触发警报.
我在星期一上午12点设置此闹钟.
如果闹钟时间过去,则会立即触发闹钟.
但是根据我的要求,我不想立即触发.我可以在第二天上午10点触发.
下面是我当前设置闹钟的代码:
Calendar activeModeTime = Calendar.getInstance();
// activeModeTime.setTimeZone(TimeZone.getTimeZone(Constants.TIME_ZONE));
activeModeTime.set(Calendar.HOUR_OF_DAY,
mSharedPrefManager.getActiveStartHourPref());
activeModeTime.set(Calendar.MINUTE,
Constants.DEFAULT_ACTIVE_START_MINUTE);
activeModeTime.set(Calendar.SECOND,
Constants.ALL_START_END_DEFAULT_SECOND);
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
activeModeTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
getActiveModeAlarmPendingIntent());
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标.
我已经使用警报管理器安排了android通知,但是我无法在尝试使用它取消的地方取消该通知,但notificationManager.cancelAll();不幸的是,我试图取消警报管理器本身不起作用。
有人知道如何取消预定的通知吗?
这是我设置警报管理器以进行通知的方式:
Intent myIntent = new Intent(DirctActivityfinal3.this, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(DirctActivityfinal3.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, timeOff9.getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
我尝试使用此代码取消警报管理器,但无法正常工作,但仍收到通知
Intent intent = new Intent(ViewTicketActivity.this, DeleteNotification.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ViewTicketActivity.this,0, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
Run Code Online (Sandbox Code Playgroud) 我有一个与推送通知挂钩的应用程序.当用户点击通知时,我希望触发广播接收器而不是活动.
我看了这些线程,看起来这是完全可能和常见的.
但是我无法让它发挥作用.我看到了通知,但是当我点击它时它从未触发我的广播接收器.
在这里我尝试过:
我创建了一个自定义接收器
public class NotificationOnClickReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
Log.d(Constants.Engine.LOGGER_TAG_GCM,
NotificationOnClickReceiver.class.toString() + " triggered");
}
}
Run Code Online (Sandbox Code Playgroud)我在我的全局应用程序(非活动)上动态注册了此接收器
mNotificationOnClickReceiver = new NotificationOnClickReceiver();
IntentFilter intentFilterOnClick = new IntentFilter(Constants.Engine.BROADCAST_RECEIVER_FILTER_NOTIFICATION_ONCLICK);
getApplicationContext().registerReceiver(mNotificationOnClickReceiver, intentFilterOnClick);
Log.e(Constants.Engine.LOGGER_TAG_DBG, "mNotificationOnClickReceiver = " + mNotificationOnClickReceiver.toString());
Run Code Online (Sandbox Code Playgroud)过滤器只是一个字符串常量(我想知道这是不是问题)
public static final String BROADCAST_RECEIVER_FILTER_NOTIFICATION_ONCLICK = "push_notification.onclick";
Run Code Online (Sandbox Code Playgroud)
接收方意图设置:
// When the user taps on the notification bar, this is the receiver that I want to be called
Intent pushNotificationIntent;
Log.e(Constants.Engine.LOGGER_TAG_DBG, "Notification called!"); …Run Code Online (Sandbox Code Playgroud)notifications android push-notification android-intent android-pendingintent
我收到一个通知,我想创建一个自定义的Back Stack,以便用户可以浏览它。但是到目前为止,单击通知会打开所需的活动,但是当我按下Back按钮时,它会完全退出该应用程序。
Intent resultIntent = new Intent(this, NotifViewActivity.class);
resultIntent.putExtra(StringHolder.NOTIFICATION_ID, notif.getId());
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(HomeActivity.class);
stackBuilder.addParentStack(NotifActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder notificationCompat = new NotificationCompat.Builder(context)
.setAutoCancel(true)
.setContentTitle(notif.getTitle())
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(resultPendingIntent);
Run Code Online (Sandbox Code Playgroud)
清单文件
<activity
android:name=".NotifActivity"
android:parentActivityName=".HomeActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".HomeActivity" />
</activity>
<activity
android:name=".NotifViewActivity"
android:parentActivityName=".NotifActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".NotifActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)
我希望它的工作方式是,在单击通知时,将用户转到 NotifViewActivity,然后在按下后退按钮时,将用户转到NotifActivity;当再次按下后退按钮时,将用户 转到 HomeActivity。正在尝试创建,我该怎么做?
android android-intent android-notifications android-pendingintent taskstackbuilder