当前位置: 首页 > 知识库问答 >
问题:

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

宦炜
2023-03-14

我正在发出警报,服务由警报启动。我希望服务接收额外数据,因此在谷歌搜索中,我将标志设置为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()不工作。。

共有2个答案

古凌
2023-03-14

根据您发布的代码,您有两个服务(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
}
杨乐意
2023-03-14

我找到了解决办法。很尴尬。。我应该在发帖之前多搜索一下自己。。。

改变了意图。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规范,仅仅是因为我没有收到任何使其可配置的功能请求,这令