广播接收器未触发

时间:2018-08-05 14:59:33

标签: java android broadcastreceiver

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

我在活动中的方法:

 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());
    }

我的BroadcastReciever:

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 个答案:

答案 0 :(得分:1)

您的代码似乎没有什么问题(我复制了代码段,并让Android Studio像您一样为它设置了android:process=":remote"的BroadcastReceiver)。

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

发生这种情况是因为您使用了android:process=":remote"。 BroadcastReceiver将在“主”应用程序进程之外的其他进程中运行,因此“ RING RING”将出现在另一个进程ID下。

enter image description here