gpt4 book ai didi

Android getExtra() 始终获取服务中的默认值

转载 作者:行者123 更新时间:2023-11-29 01:38:54 27 4
gpt4 key购买 nike

我正在闹钟,服务是通过闹钟启动的。我希望服务接收额外数据,因此通过谷歌搜索我将标志设置为 Intent.FILL_IN_DATA。下面是我的代码。(只显示重要部分)(我有几种报警方式,调用不同的服务)

public static void setAlarm(Context mContext, int mode){
if(mode==A){
intent = new Intent(mContext, AService.class);
}
else{
intent = new Intent(mContext, BService.class);
intent.putExtra(NOTI_MODE, mode);
}
PendingIntent pIntent = PendingIntent.getService(mContext, 0, intent,Intent.FILL_IN_DATA);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
Log.d("set alarm","alarm 4.4");
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
} else {
Log.d("set alarm","alarm 4.4 under");
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
}
}
public static void cancelAlarm(Context mContext){
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
PendingIntent pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, AService.class),Intent.FILL_IN_DATA);
alarmManager.cancel(pIntent);

pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, BService.class),Intent.FILL_IN_DATA);
alarmManager.cancel(pIntent);

服务端代码(编辑:此代码在 BService 类中。AService 不需要接收 Extras。)

public int onStartCommand(Intent intent, int flags, int startId) {
int notiMode=intent.getIntExtra(AlarmManagerHelper.NOTI_MODE, -1);
}

但是,结果始终为 -1,这意味着没有收到额外信息。

我的代码有什么问题?我在谷歌上搜索了几个小时,但没有希望。

如果您有任何想法,请提供帮助。

提前致谢。

编辑:setAlarm 方法在

公共(public)类 AlarmManagerHelper 扩展了 BroadcastReceiver{} 类。

以下来自AndroidManifest

<receiver android:name="com.example.test.AlarmManagerHelper" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>

当我使用

pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, BService.class), 0);

代替

pIntent = PendingIntent.getService(mContext, 0, new Intent(mContext, BService.class),Intent.FILL_IN_DATA);

在 cancelAlarm() 时,服务可以正常获取 Extras(但当然不会取消警报)

我不明白为什么当我更改 cancelAlarm() 时 setAlarm() 不起作用..

最佳答案

我找到了解决方案。很尴尬..我应该在发布问题之前自己搜索更多...

将 Intent.FILL_IN_DATA 更​​改为 PendingIntent.FLAG_UPDATE_CURRENT,现在效果很好。

不知道为什么,但如果你遇到同样的问题,请尝试这个解决方案:)

关于Android getExtra() 始终获取服务中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26067860/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com