标签: android-pendingintent

设置多个警报时仅触发一个警报

我的目标是为每个事件发出警报,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)

感谢帮助!

flags android android-alarms android-pendingintent

2
推荐指数
1
解决办法
172
查看次数

为什么Android通知意图中没有发送额外数据(整数)?

以下代码显示通知并发送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)

android android-intent android-pendingintent

2
推荐指数
1
解决办法
2059
查看次数

什么是android中的pendingIntent?

什么是pendingIntentandroid?什么时候应该使用它?,我试着在android文档中阅读它,但不幸的是我没有得到答案!

android android-pendingintent

2
推荐指数
1
解决办法
2492
查看次数

如何延迟重复报警的触发(开始时间)?

问题是我想延迟重复警报的第一次火灾.例如,我希望这个待处理的意图在点击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

2
推荐指数
1
解决办法
2178
查看次数

alarmmanager 2次

我有一个BroadcastReceiverAlarmReceiver那个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)

android alarmmanager android-pendingintent

2
推荐指数
1
解决办法
2380
查看次数

唯一待定的意图广播

当我广播挂起的意图并通过 提供我的数据时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方法添加一些标志来获得结果,但没有成功,知道吗?

android android-pendingintent

2
推荐指数
1
解决办法
485
查看次数

报警时间过去后如何避免报警触发?

我已安排每天上午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 alarmmanager android-pendingintent repeatingalarm

2
推荐指数
1
解决办法
1194
查看次数

取消预定的android通知

我已经使用警报管理器安排了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)

android alarmmanager android-pendingintent

2
推荐指数
1
解决办法
2654
查看次数

点击android通知图标不会触发广播接收器

我有一个与推送通知挂钩的应用程序.当用户点击通知时,我希望触发广播接收器而不是活动.

我看了这些线程,看起来这是完全可能和常见的.

未触发Android通知操作(PendingIntent)

通知点击发送广播

但是我无法让它发挥作用.我看到了通知,但是当我点击它时它从未触发我的广播接收器.

在这里我尝试过:

  1. 我创建了一个自定义接收器

    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)
  2. 我在我的全局应用程序(非活动)上动态注册了此接收器

    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)
  1. 接收方意图设置:

    // 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

2
推荐指数
1
解决办法
2732
查看次数

无法为活动创建后台堆栈

我收到一个通知,我想创建一个自定义的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

2
推荐指数
1
解决办法
659
查看次数