标签: android-pendingintent

如何创建不同的pendingintent使filterEquals()返回false?

我正在使用AlarmManager设置重复意图,但它已经造成一些小问题,所以希望任何人都可以提供帮助.

摘要

有2个未决意图.一个运行在1000,另一个运行在每天2000.每个包含来自数据库的行id以用于识别目的.代码看起来像这样:

Intent i = new Intent(mContext, ScheduleReceiver.class);
i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId);
PendingIntent pi =PendingIntent.getBroadcast(...);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi); 
Run Code Online (Sandbox Code Playgroud)

删除:

问题是我们需要删除其中一个.删除待处理意图的正确方法是设置相同的意图,然后从AlarmManager调用cancel.

Android文档:

public void cancel(PendingIntent operation)
删除具有匹配Intent的所有警报.任何类型的警报,其Intent与此匹配的警报(由filterEquals(Intent)定义)将被取消.

public boolean filterEquals(Intent other)
确定两个意图是否相同以进行意图解析(过滤).也就是说,如果他们的行为,数据,类型,类别和类别是相同的.这不会比较意图中包含的任何额外数据.

所以在上面的例子中,如果我做出相同的意图然后取消,上述两个意图将被取消,因为它们来自同一个类/相同的动作等(除了"额外"数据是rowId但filterEquals不关心额外数据).

这有什么解决方法吗?

android repeat alarmmanager android-pendingintent

20
推荐指数
1
解决办法
7671
查看次数

带有"null"PendingIntent的通知

我正在尝试在Android中实现通知.

现在我有一个问题,我不希望有一个PendingIntent用户会打开任何Activity.我怎样才能做到这一点?

android-notifications android-pendingintent

19
推荐指数
2
解决办法
9539
查看次数

Android Notification重新启动应用但想要恢复

嗨,我已经能够显示我的活动的通知,当用户点击通知时,应用程序重新启动.但是我只是希望它重新出现而不是重启.例如.它是一个Web应用程序,我希望它在用户选择通知时出现在前面..但不刷新网页.我可以捕获这个意图还是我发错了意图?通常,如果我按下主页按钮并单击应用程序图标,应用程序就会出现并且不会刷新/重新启动.所以这就是我想要的行为.有任何想法吗 ?

 String ns = Context.NOTIFICATION_SERVICE;
 NotificationManager mNotificationManager = (NotificationManager)
                                             getSystemService(ns);
 //2.Instantiate the Notification
 int icon = R.drawable.notification_icon;
 CharSequence tickerText = "My App";  // temp msg on status line 
 long when = System.currentTimeMillis();
 Notification notification = new Notification(icon, tickerText, when);
 notification.flags |= Notification.FLAG_ONGOING_EVENT;
 //3.Define the Notification's expanded message and Intent: 
 Context context = getApplicationContext();
 CharSequence contentTitle = "Notification";
 CharSequence contentText = "My app!"; // message to user
 Intent notificationIntent = new Intent(this, HelloAndroid2.class);
 PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
                                                          notificationIntent, 0); …
Run Code Online (Sandbox Code Playgroud)

notifications android background foreground android-pendingintent

18
推荐指数
3
解决办法
2万
查看次数

如何使用待定意图启动新活动

任何人都可以说如何使用待定意图启动新活动,并使用待定意图传递值.提前致谢.

android android-intent android-pendingintent

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

是否可以使用相同的requestCode和不同的附加项创建多个PendingIntents?

AlarmManager用来安排1到35个警报(取决于用户输入).当用户请求安排新警报时,我需要取消当前警报,因此我使用在final变量中定义的相同requestCode创建所有警报.

// clear remaining alarms
Intent intentstop = new Intent(this, NDService.class);
PendingIntent senderstop = PendingIntent.getService(this,
            NODIR_REQUESTCODE, intentstop, 0);
am.cancel(senderstop);

// loop through days
if (sched_slider.getBooleanValue())
for (int day = 1; day < 8; day++) {

    if (day == 1 && sun.isChecked())
                scheduleDay(day);
    if (day == 2 && mon.isChecked())
                scheduleDay(day);
    if (day == 3 && tue.isChecked())
                scheduleDay(day);
    if (day == 4 && wed.isChecked())
                scheduleDay(day);
    if (day == 5 && thu.isChecked())
                scheduleDay(day);
    if (day == 6 && fri.isChecked()) …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-pendingintent

18
推荐指数
2
解决办法
5544
查看次数

如何为broadcastReceiver使用"goAsync"?

背景

从Honeycomb(API 11)开始,Android具有允许broadcastReceiver以异步方式运行的功能,在它假定它可以使用名为" goAsync " 的方法杀死其进程之前大约10秒:

这可以由onReceive(Context,Intent)中的应用程序调用,以允许它在从该函数返回后保持广播活动.这不会改变对广播相对响应的期望(在10秒内完成),但允许实现将与其相关的工作移到另一个线程,以避免因磁盘IO而导致主UI线程出现故障.

问题

我在很多地方搜索过,没有找到任何关于如何使用它的示例或教程.

不仅如此,该方法返回一个PendingIntent实例,我不知道该如何处理它:

返回表示活动广播结果的BroadcastReceiver.PendingResult.BroadcastRecord本身不再有效; 所有数据和其他交互必须通过BroadcastReceiver.PendingResult API.完成广播处理后,必须调用PendingResult.finish()方法.

这个问题

你是如何使用这种方法的?

什么是它返回的PendingIntent,我应该怎么做呢?

android asynchronous broadcastreceiver android-pendingintent

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

在临时演员中没有包含pendingIntent?

在处理应用程序时,我在Logcat上遇到此错误消息.谁能告诉我它意味着什么?

07-24 23:34:20.288    1140-1140/? E/NetworkScheduler.SchedulerReceiver? Invalid parameter app
07-24 23:34:20.288    1140-1140/? E/NetworkScheduler.SchedulerReceiver? Invalid package name : Perhaps you didn't include a PendingIntent in the extras
Run Code Online (Sandbox Code Playgroud)

为了您的信息:我在这个应用程序中使用了AlarmManager

android alarmmanager android-pendingintent

18
推荐指数
1
解决办法
1万
查看次数

对AlarmManager.setRepeating的多次调用提供了相同的Intent/PendingIntent额外值,但我提供了不同的值

在写这个问题时解决了,但发布以防万一:

我正在设置这样的多个警报,具有不同的值id:

AlarmManager alarms = (AlarmManager)context.getSystemService(
        Context.ALARM_SERVICE);
Intent i = new Intent(MyReceiver.ACTION_ALARM);  // "com.example.ALARM"
i.putExtra(MyReceiver.EXTRA_ID, id);  // "com.example.ID", 2
PendingIntent p = PendingIntent.getBroadcast(context, 0, i, 0);
alarms.setRepeating(AlarmManager.RTC_WAKEUP, nextMillis, 300000, p);  // 5 mins
Run Code Online (Sandbox Code Playgroud)

......并像这样接收它们:

public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_ALARM)) {
        // It's time to sound/show an alarm
        final long id = intent.getLongExtra(EXTRA_ID, -1);
Run Code Online (Sandbox Code Playgroud)

警报在适当的时间传递给我的接收器,但通常EXTRA_ID设置为错误的值:它是我在某个时刻使用的值,而不是我想要在那个特定时间传递的值.

android extras alarms android-pendingintent

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

未触发Android通知操作(PendingIntent)

我想在我的应用程序中添加一个Notification操作项,这是一个音乐播放器.启动流时,应触发通知,并在通知中显示流的停止按钮.到目前为止通知工作正常,我遇到了停止操作项目的问题.以下是在启动流的服务中声明它的方式:

Intent stopIntent = new Intent(this, MusicPlayerNew.class);
stopIntent.putExtra("STOP", "STOP");
PendingIntent stopPendingIntent = PendingIntent.getActivity(this, 0,
                stopIntent, PendingIntent.FLAG_UPDATE_CURRENT, null);
mBuilder.addAction(R.drawable.ic_stat_stop, "Stop", stopPendingIntent);
Run Code Online (Sandbox Code Playgroud)

现在在onResume() - 我的活动方法中,我用getIntent().getStringExtra()检查"STOP"额外,但我通过getIntent()检索的意图没有设置额外的东西:(

我还试图检查发送广播(我有一个广播接收器工作从服务到活动进行通信)

Intent stopIntent2 = new Intent(MusicPlayerNew.STOP_MEDIAPLAYER);
PendingIntent stopPendingIntent2 = PendingIntent.getBroadcast(this, 0,
                stopIntent2, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.addAction(R.drawable.ic_stat_stop, "Stop", stopPendingIntent2); 
Run Code Online (Sandbox Code Playgroud)

现在,如果活动当前位于前台,则此功能正常.如果活动在后台,则停止按钮不执行任何操作:(

编辑: 我在我的Activity中将BroadcastReceiver作为私有类

private class DataUpdateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
..
}}
Run Code Online (Sandbox Code Playgroud)

在onResume()中注册我的app接收器:

intentFilter = new IntentFilter(STOP_MEDIAPLAYER);
registerReceiver(dataUpdateReceiver, intentFilter);
Run Code Online (Sandbox Code Playgroud)

的onPause()

unregisterReceiver(dataUpdateReceiver);
Run Code Online (Sandbox Code Playgroud)

现在,如果我从onPause() - 方法中删除取消注册,即使app/activity不在前台,也会收到广播.但这是正确的方法吗?我从网上的教程中得到了这个注册/取消注册的内容我认为..

android android-intent android-notifications android-activity android-pendingintent

17
推荐指数
4
解决办法
1万
查看次数

如何在android中停止警报

在我的主要活动中有一个按钮.在它的onclick监听器我调用功能来设置闹钟.警报正在工作,但我无法阻止它.可以帮助我一些人

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                setalarm();
            }


        });
    }

    private void setalarm() {

        Calendar cal=Calendar.getInstance();
        // cal.set(Calendar.MONTH,6);
        // cal.set(Calendar.YEAR,2013);
        // cal.set(Calendar.DAY_OF_MONTH,12);
        cal.set(Calendar.HOUR_OF_DAY,18);
        cal.set(Calendar.MINUTE,32);
        Intent intent = new Intent(this, Mote.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT|  Intent.FILL_IN_DATA);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
        Toast.makeText(this, "Alarm SET.", Toast.LENGTH_LONG).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) { …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-pendingintent

17
推荐指数
1
解决办法
3万
查看次数