关于服务中接收器的 Androidmanifest 构建错误

Androidmanifest build error about receiver within a service

我正在尝试在 AndroidStudio 上使用 gradle>assembleRelease 构建应用程序,但出现错误:

错误:(31)错误:元素必须是元素 [WrongManifestParent]

的直接子元素

相关代码是:

  <service android:enabled="true" android:name="com.example.xx.ServiceCalendar">
        <receiver android:name="com.example.xx.ServiceCalendar">
            <intent-filter>
                <action android:name="ALARM_DL" />
                <action android:name="ALARM_PARSE" />
                <action android:name="ALARM_NOTIF" />
            </intent-filter>
        </receiver>
    </service>

但问题是如果我将我的接收器直接放在我的应用程序下,它会在设置警报时死掉。

这方面的最佳做法是什么? 提前致谢

更新:

我知道接收器和服务是两个不同的东西,这是我的 ServiceCalendar class 的一部分:

public class ServiceCalendar extends Service {
    private PendingIntent pendingIntent;
    private AlarmManager manager;
    BroadcastReceiver mReceiver;


public void startAlarm() {
    manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    int interval =7200000;


    Intent alarmIntent = new Intent("ALARM_DL");
    pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);


    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);

}

private final BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {

        if (arg1.getAction().equals("ALARM_DL"))
        {
            //action 1
        }
        else if (arg1.getAction().equals("ALARM_PARSE")){
             //action 2
        }
        else if(arg1.getAction().equals("ALARM_NOTIF")){
            //action3
        }

    }

};
}

如您所见,我正在尝试 运行 我的服务中的 Broadcastreceiver,但我不知道如何在清单中设置它。

有没有办法做到这一点(我看到一些例子,我认为是这样)?

您必须分别创建一个 Service 和一个 BroadcastReceiver,而不是创建一个内部动态 BroadcastReceiver。

在 AndroidManifest 中:

<service android:enabled="true" android:name="com.example.xx.ServiceCalendar">
</service>
<receiver android:name="com.example.xx.BroadcastReceiverCalendar">
  <intent-filter>
       <action android:name="ALARM_DL" />
       <action android:name="ALARM_PARSE" />
       <action android:name="ALARM_NOTIF" />
  </intent-filter>
</receiver>

创建 2 类,第一个服务:

public class ServiceCalendar extends Service {
    private PendingIntent pendingIntent;
    private AlarmManager manager;

    public void startAlarm() {
        manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        int interval =7200000;


        Intent alarmIntent = new Intent("ALARM_DL");
        pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

        manager.setRepeating(AlarmManager.RTC_WAKEUP,        System.currentTimeMillis(), interval, pendingIntent);
    }
}

和第二个 BroadcastReceiver:

public class BroadcastReceiverCalendar extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {

        if (arg1.getAction().equals("ALARM_DL"))
        {
            //action 1
        }
        else if (arg1.getAction().equals("ALARM_PARSE")){
             //action 2
        }
        else if(arg1.getAction().equals("ALARM_NOTIF")){
            //action3
        }

    }
}