【问题标题】:Pass data to activity started by service将数据传递给服务启动的活动
【发布时间】:2016-11-26 21:34:14
【问题描述】:

我一直在尝试使用 WakefulBroadcastReceiver 制作一个警报应用程序,该应用程序启动一个唤醒服务 (IntentService),该服务启动 SecondActivity(警报在 MainActivity 中设置)。但是,即使使用 Intents,我也无法弄清楚如何将数据从 MainActivity 传递到 SecondActivity。这是设置闹钟的代码:

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.putExtra("requestCode", 111);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 111, intent, 0);
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), pendingIntent);

AlarmReceiver 中onReceive 的代码:

Intent service = new Intent(context, AlarmService.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);

AlarmService中onHandleIntent的代码:

Context context = getApplicationContext();
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);

最后,在SecondActivity的onCreate,我有如下代码:

Intent intent = getIntent();
Log.i("APP", "requestCode: " + intent.getIntExtra("requestCode", 444));

输出为requestCode: 333,这是AlarmService 的onHandleIntent 中的默认/故障安全值(而不是传递的原始请求代码,即111)。我错过了什么?

编辑:onReceive 的代码应为:

Intent service = new Intent(context, AlarmService.class);
service.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);

这样就解决了问题。

【问题讨论】:

    标签: android android-intent android-pendingintent android-alarms


    【解决方案1】:
    Intent intent = new Intent(context, SecondActivity.class);
    intent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));
    

    您已将 new 意图命名为与您在服务中收到的意图相同,因此在第二行中您引用的不是旧的意图,而是新的 - 您的意图'重新尝试初始化 - 这个还没有这个额外的,所以它解析为默认值。改为:

    Intent activityIntent = new Intent(context, SecondActivity.class); // or any other name different than 'intent'
    activityIntent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));
    

    除此之外,您的代码看起来还不错。

    【讨论】:

    • 实际上,我注意到我犯了一个非常愚蠢的错误——我在onReceive 中写了intent.putExtra 而不是service.putExtra,这解决了问题。不过,我会更改您指出的部分,以确保!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2018-07-21
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多