【问题标题】:Passing values using intent extras in Alarm Manager in android在android的警报管理器中使用intent extras传递值
【发布时间】:2012-09-04 03:29:31
【问题描述】:

我想知道这段代码是否有效(我现在无法尝试。此外,我还有一些疑问需要解决)。

Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("user",global.getUsername());
intent.puExtra("password",global.getPassword);
PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
Log.v("inside log_run", "new service started");
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, IMMEDIATELY,60000,sender);
finish();

如您所见,此代码以setRepeating() 开头的AlarmManager。如果您看到传递给BroadcastReceiver 的意图(实际上是待处理的意图),则传递了两个额外内容。只要应用程序正在运行,这些都是全局变量。但是这个AlarmManager 是为了在后台运行(也就是说,应用程序只会在 alrmamanager 对广播接收器的前几次调用中才有效)
我的问题
AlarmManager 是否会复制全局变量(用户名和密码)并维护该副本以与意图一起传递(作为附加项)?还是它会引用全局变量(在过程中,当全局变量变为 null 时,将 null 作为额外的传递)?因为,这些值将在广播接收器中使用。

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

    我可以看到这种方法产生的问题。我要做的是将您的两个变量存储在 SharedPrefs 文件中,并直接从 BroadcastReciever 访问它们。 SharedPrefs 值会持续存在,而 Android 中的“全局变量”则不会。

    【讨论】:

    • 我想到了这个方法。但共享首选项存储在 xml 文件中。这些文件,如果导出的话,任何人都可以看到。但不是全局变量。
    • SharedPrefs 默认情况下是私有的,引用文档 - “创建的文件只能由调用应用程序(或共享相同用户 ID 的所有应用程序)访问。”
    • 你说得对。但我想说的是,如果我将手机连接到我的 PC 并使用 DDMS 在 Eclipse 中,我可以将 XML 文件导出到我的 PC。这可以通过数据库来完成。可以通过这种方式导出应用程序数据库。
    • 啊,我没有考虑过这个。
    • 我认为您的解决方案可能有效,因为手机未root时无法导出xml文件。
    【解决方案2】:

    在警报管理器上,只需将 getApplicationContext 作为参数传递给辅助构造器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多