为什么我的自定义接收器不工作?

时间:2014-09-12 11:08:34

标签: android parse-platform android-broadcast

我使用parse.com api。

我的问题是:

当其他客户端发送推送通知时,我的广播接收器上没有收到任何内容。

我的清单

  <service android:name="com.parse.PushService" />

  <receiver
      android:name=".MainActivity$MyReceiver"  >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="com.yy.xx.UPDATE_STATUS" />
        </intent-filter>
    </receiver>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" />

我的主要活动接收者在这里:

public static class MyReceiver extends BroadcastReceiver {
    public final String TAG = "MyReceiver";
    @Override
    public void onReceive(Context context, Intent intent) { 

           //this is not working,

        try {
            if (intent == null)
            { 
                Log.d(TAG, "Receiver intent null");
            }  
            else 
            {     
                String action = intent.getAction();  
                if (action.equals("com.yy.xx.UPDATE_STATUS"))
                {       
                              //....
                }
            }

        } catch (JSONException e) {
            Log.d(TAG, "JSONException: " + e.getMessage());
        }
    }
}

和我的推送通知发送代码在这里:

  JSONObject obj;
                    try {
                        obj =new JSONObject();  
                        obj.put("action","com.yy.xx.UPDATE_STATUS");
                        obj.put("customdata","message..."); 

                        push_p = new ParsePush();
                        @SuppressWarnings("rawtypes")
                        ParseQuery query = ParseInstallation.getQuery();

                        // Notification for Android users
                        //query.whereEqualTo("deviceType", "android");
                        push_p.setQuery(query);
                        push_p.setData(obj); 
                        push_p.setChannel("channel_111"); 

                        push_p.sendInBackground(); 

                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

我阅读了parse.com api和教程,但我不明白是什么问题。

提前致谢

1 个答案:

答案 0 :(得分:0)

在清单

中添加所有此声明
<!-- PARSE SERVICE AND RECEIVERS -->

    <service
        android:name="com.parse.PushService"
        android:enabled="true" />

    <receiver android:name="com.parse.ParseBroadcastReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.parse.GcmBroadcastReceiver"
        android:enabled="true"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.example.app" />
        </intent-filter>
    </receiver>
      <receiver android:name=".MainActivity$MyReceiver" >
        <intent-filter>
            <action android:name="com.example.update.UPDATE_STATUS" />
        </intent-filter>
    </receiver>   

并添加权限

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
 <uses-permission android:name="com.example.app.permission.C2D_MESSAGE" />
 <permission
    android:name="com.example.app.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />