我正在发出警报,服务由警报启动。我希望服务接收额外数据,因此在谷歌搜索中,我将标志设置为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不需要接收额外代码。)
public int onStartCommand(Intent intent, int flags, int startId) {
int notiMode=intent.getIntExtra(AlarmManagerHelper.NOTI_MODE, -1);
}
但是,结果始终为-1,这意味着没有额外收到。
我的代码有什么问题?我在谷歌上搜索了几个小时,没有任何希望。
如果你有任何想法,请帮忙。
提前感谢。
编辑:set警报方法在
公共类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.get服务(mContext,0, new Intent(mContext, BService.class),0);
而不是
pIntent=PendingIntent.get服务(mContext,0, new Intent(mContext, BService.class), Intent.FILL_IN_DATA);
在取消警报(),服务得到额外的所有权利(但报警不取消当然)
当我更改cancelAlarm()时,我不明白为什么setAlarm()不工作。。
根据您发布的代码,您有两个服务(AService和BService)。
我猜您共享的代码片段是为了您的AService?
我认为您的set警报方法的顶部应该是:
public static void setAlarm(Context mContext, int mode)
{
if(mode==A)
{
intent = new Intent(mContext, AService.class);
// NOTE: Add this line!
intent.putExtra(NOTI_MODE, mode);
}
else
{
intent = new Intent(mContext, BService.class);
intent.putExtra(NOTI_MODE, mode);
}
// snipped rest of code in this method
}
我找到了解决办法。很尴尬。。我应该在发帖之前多搜索一下自己。。。
改变了意图。FILL_IN_DATA为PendingIntent。FLAG_UPDATE_CURRENT,现在它像魅力一样工作。
不知道原因,但如果您遇到同样的问题,请尝试以下解决方案:)
问题内容: 我想使用Java获取本地计算机的默认网关。我知道如何通过执行dos或shell命令来获取它,但是还有其他获取方法吗?还需要获取主要和辅助dns ip。 问题答案: 没有简单的方法可以做到这一点。您必须调用本地系统命令并解析输出,或者读取配置文件或注册表。我知道没有一种独立于平台的方式可以实现此目的- 如果要在所有平台上运行,则必须为linux,mac和Windows进行编码。 请参阅如
我正在尝试在Spring中使用MessageSource注入文本消息。我编写的程序编译良好,但它总是打印出默认消息,而不是从. Properties文件中获取正确的值。我一点线索也没有。 下面是尝试注入文本的Circle类: 下面是bean配置文件的一部分: 我存储问候语和画图。圈入消息。属性文件,并编写了一个主类。但输出总是: 有人知道我的情况可能会出什么问题吗? 更新感谢您的建议。我正在调试,
当我尝试将 Swagger 集成到一个非常简单的Spring启动 REST 应用程序 Swagger-UI 中时.html不会显示和获取我自定义的 API 信息。我应该如何更改以下代码,以便 Swagger UI 页面将显示自定义的 API 信息?我也无法调试 SwaggerConfig 类,将断点放入,但当作为Spring启动应用运行时,断点不会停止。 我在pom.xml: 我的SwaggerC
问题内容: 我正在使用Oracle数据库。 我想使用Java JDBC获得分配给列的默认值。 但是using 没有提供任何方法来获取列的默认值。 所以,请告诉我任何想法。提前致谢。 问题答案: 您可以运行此查询
问题内容: 我安装在本地。 仪表板是192.168.99.100:30000 我通过掌舵安装了詹金斯: 然后,该服务始终处于待处理状态: 为什么?因此,不能使用external-ip来访问它。 问题答案: 我猜测您没有更新要使用的参数而不是默认参数。minikube集群不支持该类型,因此Kubernetes在循环尝试创建负载均衡器以获取外部IP。 使用掌舵查看稳定/詹金斯图表的选项: 您可以通过以
问题内容: 根据我的理解和JPA批注进行提取。我希望将它们延迟加载到我的应用程序中,或者至少提示它(这是hibernate默认值)。我已经开始添加注释 例如 代替 这既乏味又容易出错。有什么方法可以在应用程序级别执行此操作吗?在persistence.xml中? 问题答案: 迄今为止,我选择让Hibernate在通过注释进行映射方面遵循JPA规范,仅仅是因为我没有收到任何使其可配置的功能请求,这令