【问题标题】:Call a method from Activity on BroadcastReceiver called by an AlarmManager调用由 AlarmManager 调用的 BroadcastReceiver 上的 Activity 方法
【发布时间】:2013-12-23 04:04:13
【问题描述】:

我是新来的,所以我希望我的问题是正确的。提前致谢!

我的问题是:

BroadcastReceiverAlarmManager 以这种方式通过同一 BroadcastReceiver 内部的方法调用:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Receiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis(), 5000, pi);

onRecieve 一直有效,直到我将 MainActivity 的方法放在那里。当调用代码时,每次AlarmManager 尝试启动 onReceive 时我都会收到此错误:

12-22 21:56:01.020: W/BroadcastQueue(2192): Unable to launch app com.example/10000 for broadcast Intent { flg=0x14 cmp=com.example/.Receiver (has extras) }: process is bad

如果我在 BroadcastReceiver 上创建一个接收 MainActivity 的方法,我可以在 BroadcastReceiver 的该方法中调用来自 MainActivity 的方法:

public void SetHandler(Context context, MainActivity main) {
    MainActivity mainactivity;
this.mainactivity = main;
mainactivity.method();
}      

但我不明白如何在 BroadcastReceiver 的 onReceive 中调用它们。

onRecieve 上的mainactivity.method() 不起作用,我不知道是因为它没有被AlarmManager 附加到MainActivity 还是因为我做错了。

如果问题是由于Activity与BroadcastReceiver的附件问题,那是怎么做的呢? 如果这不是问题,那会是什么?

【问题讨论】:

    标签: android broadcastreceiver alarmmanager


    【解决方案1】:

    将您的BroadcastReceiver 注册到活动并创建一个IntentService 将其放入AlarmManager 并在您的服务的handleIntent 功能中发送广播到提供的IntentFilter,您将能够调用活动方法onReceive

    【讨论】:

      【解决方案2】:

      我遇到了这个process is bad 错误,我必须保持我的 FCM 服务导出。 添加:

      android:exported="true"
      

      或完全删除 exported="false"

      我的服务现在看起来像这样:

          <service
              android:name=".service.MyFirebaseMessagingService"
              android:exported="true"
              >
              <intent-filter>
                  <action android:name="com.google.firebase.MESSAGING_EVENT" />
              </intent-filter>
          </service>
          <service
              android:name=".service.MyFirebaseInstanceIdService"
              android:exported="true"
              >
              <intent-filter>
                  <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
              </intent-filter>
          </service>
      

      希望这对你也有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多