广播接收器未触发

4

我正在编写一个应用程序,它会在特定日期/时间触发特定的方法。然而,我的广播接收器没有触发...我可以看到闹钟已经设置了。

在活动中的我的方法:

 private void setAlarm(Date date){

        Intent activate = new Intent(this, Alarm.class);
        AlarmManager alarms ;
        Calendar cal = new GregorianCalendar();
        cal.setTimeInMillis(date.getTime());
        PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, activate, 0);
        alarms = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
        Log.d("ALARM","Setting alarm");
        alarms.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), alarmIntent);
        Log.d("ALARM","Setting time "+cal.getTimeInMillis());
    }

我的广播接收器:

public class Alarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("ALARM", "RING RING");

    }
}

我在<application>标签中的清单:

<receiver android:name=".Alarm" android:process=":remote" >
        <intent-filter>
            <action android:name="com.package.feature.subpackage.arrangealarm.ALARM_ACTION"/>
        </intent-filter>
    </receiver>

有人知道为什么这个没有触发吗?
1个回答

1

看起来你的代码没有问题(我复制了片段,让Android Studio生成了一个BroadcastReceiver,其中我设置了android:process=":remote",就像你做的一样)。

当我运行应用程序时,BroadcastReceiver会触发,但只有在我选择“无过滤器”Logcat设置(右侧)时,才能看到相应的Logcat条目,而不是当我选择“仅显示所选应用程序”时。

这是因为你使用了android:process=":remote"。BroadcastReceiver将在与“主”应用程序进程不同的进程中运行,因此“RING RING”将出现在另一个进程ID下。

enter image description here


我已经使用您的代码更新了我的问题,但仍然没有“铃铃”声? - James Palfrey
@James Palfrey - 我承认在回答之前跳过了测试,因为我认为“唯一可能缺少的是Intent Filter”。另一方面,您正在使用显式广播(Intent引用“Alarm.class”),并且在这种情况下似乎不需要Intent Filter。所以我错了,抱歉。我是怎么发现的?因为在您的评论之后,我最终将您的片段复制到了一个示例应用程序中并运行它。没有Intent Filter。 - Bö macht Blau
而且,“RING RING”在Logcat中很好地显示出来。由于BroadcastReceiver具有android:process=":remote",因此在过滤“仅显示选定应用程序”后看不到它。因此,您必须选择“无过滤器”,然后它就在那里。至少在我的模拟器中是这样的。 - Bö macht Blau
谢谢伙计,不然我会在那里转圈很长一段时间! - James Palfrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接