从AlarmManager调用的BroadcastReceiver上的Activity调用方法

时间:2013-12-23 04:04:13

标签: android broadcastreceiver alarmmanager

我是新来的,所以我希望我的问题得到正确的解答。提前谢谢!

我的问题是:

BroadcastReceiverAlarmManager方式通过同一BroadcastReceiver内的方法调用{/ 1}}:

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的{​​{1}}上创建方法,我可以在BroadcastReceiver的方法中调用MainActivity中的方法:

MainActivity

但我无法理解如何在BroadcastReceiver的onReceive中调用它们。

onRecieve上的

public void SetHandler(Context context, MainActivity main) { MainActivity mainactivity; this.mainactivity = main; mainactivity.method(); } 不起作用,我不知道是不是因为它mainactivity.method()没有附加到MainActivity,或者是因为我'做错了。

如果问题是由于活动与BroadcastReceiver的关联,它是如何完成的? 如果这不是问题,它会是什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我遇到此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>

希望这对你也有帮助。