在解析推送通知自定义接收器中访问 运行 activity

get access to running activity in parse push notification custom receiver

我有一个使用解析推送通知服务的应用程序。这是我用来接收通知的 class:

public class MessageReceiver extends ParsePushBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    //...some code in here
}

而且我还在我的清单中注册了这个自定义接收器:

<receiver
        android:name="com.package.MessageReceiver"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>

通知系统一切正常。收到通知后,我想相应地更新 运行 activity UI(比如显示新通知的图标)但我无权访问 activity onReceive 方法中的对象。这样做的最佳做法是什么?我不能在这件事上使用上下文对象。 谢谢

我相信您可以使用 BroadcastReceiver 来完成此操作。

您可以在您想要访问的活动中定义接收者, 请参阅下面的代码段。

public MyActivity extends Activity
{

    //... code
    private BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                //... update ui here
             }
         };

    @Override
    protected void onResume() {
        IntentFilter filter = new IntentFilter();
        filter.addAction("suitablename"); 
        registerReceiver(receiver, filter);
        super.onResume();
    }

    @Override
    protected void onPause() {
        unregisterReceiver(receiver);
        super.onPause();
    }

    //... code
}

然后在您的自定义接收器中发送广播。

public class MessageReceiver extends ParsePushBroadcastReceiver {

     @Override
     public void onReceive(Context context, Intent intent) {
         //...some code in here

        Intent intent = new Intent();
        intent.setAction("suitablename");
        context.sendBroadcast(intent);
     }
}

别忘了更新清单

<activity
    android:name=".MyActivity" >

    <intent-filter>
        <action android:name="suitablename"></action>
    </intent-filter>
</activity>