我想处理推送通知而不在通知栏中显示它,默认情况下Parse.com会做什么。
Parse.com 需要清单中的条目,因此我无法将其更改为我自己的BroadcastReceiver
,因为它无效。
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
android:priority="1">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="packagename" />
</intent-filter>
</receiver>
所以我所做的就是为同一个IntentFilter
创建第二个接收器,但优先级更高。
<receiver android:name="packagename.ParseComPushReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
android:priority="2">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="packagename" />
</intent-filter>
</receiver>
我尝试中止广播
@Override
public void onReceive(final Context context, final Intent intent) {
abortBroadcast();
// handle here
}
但不幸的是,我仍然看到&#34;收到通知&#34;通知栏中的通知。
答案 0 :(得分:4)
您实际上可以使用自己的自定义广播接收器和Parse。它已在推送指南here中记录。
具体来说,替换:
<receiver android:name="com.parse.ParsePushBroadcastReceiver"
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>
使用:
<receiver
android:name="com.example.MyCustomReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.example.UPDATE_STATUS" />
<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>
并实施自己的接收器:
public class MyCustomReceiver extends ParsePushBroadcastReceiver {
private static final String TAG = "MyCustomReceiver";
@Override
public void onReceive(Context context, Intent intent) {
try {
String action = intent.getAction();
String channel = intent.getExtras().getString("com.parse.Channel");
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
// Custom behavior goes here
} catch (JSONException e) {
Log.d(TAG, "JSONException: " + e.getMessage());
}
}
}
答案 1 :(得分:2)
我无法弄清楚如何让这种方法适用于从Web控制台发送而不是从设备构建的推送,因此默认的&#34;通知收到&#34;消息仍然存在。
对我有用的是添加android:exported =&#34; false&#34;到这样的parse.com条目:
<receiver
android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
android:exported="false">
<intent-filter>
<action android:name="com.example.DISABLE_PARSE_PUSH" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example" />
</intent-filter>
</receiver>
<service android:name="com.parse.PushService" />
这会禁用默认通知。