关于服务中接收器的 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
}
}
}
我正在尝试在 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
}
}
}