2016-06-13 3 views
0

Im eine Push-Nachricht mit einem benutzerdefinierten action aber in den onPushReceive die Aktion sendet, die ich erhalte, ist com.parse.push.intent.RECEIVE statt com.hellboy.beat.STATUS_DONEParse-Android; Kann nicht erhalten 'Aktion' in benutzerdefinierten ParseBroadcastReceiver

Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.hellboy.beat" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="23" /> 

    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

    <!-- permission required to use Alarm Manager --> 
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" /> 

    <!-- permission required for Notification --> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <!-- permission required to Send SMS --> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <!-- permission required to get Location & Number --> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

    <!-- permission required to Vibrate --> 
    <uses-permission android:name="android.permission.VIBRATE" /> 

    <!-- permission required to use Parse --> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <!-- permission required to use Parse Push --> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <permission 
     android:name="com.parse.starter.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="com.hellboy.beat.permission.C2D_MESSAGE" /> 

    <application 
     android:name="com.hellboy.beat.Application" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.hellboy.beat.main.Activity_main" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.hellboy.beat.login.Activity_login" /> 
     <activity android:name="com.hellboy.beat.requests.Activity_requests" /> 
     <activity android:name="com.hellboy.beat.settings.Activity_settings" /> 

     <!-- Register the Notification Receiver --> 
     <service android:name="com.parse.PushService" /> 

     <!-- Regular Push Notification --> 
     <receiver android:name="com.parse.ParseBroadcastReceiver" /> 

     <!-- Our Reciver --> 
     <receiver 
      android:name="com.hellboy.beat.PushRec" 
      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.hellboy.beat.STATUS_DONE" /> 
       <action android:name="com.parse.push.intent.OPEN" /> 
      </intent-filter> 
     </receiver> 
     <receiver 
      android:name="com.parse.GcmBroadcastReceiver" 
      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" /> 

       <!-- IMPORTANT: Change "com.parse.starter" to match your app's package name. --> 
       <category android:name="com.hellboy.beat" /> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

PushRec.java

public class PushRec extends ParsePushBroadcastReceiver 
{ 
    private static final String TAG = "BEAT_PUSHREC"; 

    Context context; 

    @Override 
    public void onPushReceive(Context context, Intent intent) 
    { 
     this.context = context; 

     Log.i(TAG, "Receiver"); 

     if (intent == null) 
     { 
      Log.i(TAG, "Receiver intent null"); 
     }else 
     { 
      Log.i(TAG, "Receiver intent not null"); 

      String action = intent.getAction(); 
      Log.i(TAG, "got action " + action); 

      if (action.equals("com.hellboy.beat.STATUS_DONE")) 
      { 
       //DOES NOT COME OVER HERE 
      } 
     } 
    } 
    } 

Senden-Push:

   ParseQuery<ParseInstallation> pushQuery = ParseInstallation.getQuery(); 
       pushQuery.whereMatchesQuery("user", subscriberQuery); 

       JSONObject obj=null; 

       obj =new JSONObject(); 
       try 
       { 
        obj.put("action","com.hellboy.beat.STATUS_DONE"); 
        obj.put("statusdone_message" , message); 
       } catch (JSONException e1) { 
        e1.printStackTrace(); 
       } 

       //TODO move this to the 'cloud' 
       ParsePush pPush = new ParsePush(); 
       pPush.setQuery(pushQuery); 
       pPush.setData(obj); 

       pPush.sendInBackground(); 

HINWEIS: Mein Verständnis ist, dass ich einen Fehler in der Manfiest machen, da die Meldung kommt, aber die falsche action ist

Antwort

1

Sie können OnReceive Methode überschreiben aufgerufen um Ihre benutzerdefinierte Aktion zu versenden.

@Override 
    public void onReceive(Context context, Intent intent) { 
    String intentAction = intent.getAction(); 
    switch (intentAction) { 
     case "com.hellboy.beat.STATUS_DONE": 
     onPushReceive(context, intent); 
     break; 
     case ACTION_PUSH_DELETE: 
     onPushDismiss(context, intent); 
     break; 
     case ACTION_PUSH_OPEN: 
     onPushOpen(context, intent); 
     break; 
    } 
    } 

https://github.com/ParsePlatform/Parse-SDK-Android/blob/master/Parse/src/main/java/com/parse/ParsePushBroadcastReceiver.java

+0

Was ist der Unterschied zwischen onPushReceive und onReceive? Soll ich BroadcastReceiver auch erweitern, indem ich ParsePushBroadcastReceiver erweitere? – Zen

+0

Ich bekomme das: '06 -15 03: 50: 02.525: I/BEAT_PUSHREC (9353): get action com.parse.push.intent.RECEIVE '; obwohl die Aktion, die ich in meinem Json bereitgestellt habe, "com.hellboy.beat.STATUS_DONE" – Zen

+0

Parse.setLogLevel (Parse.LOG_LEVEL_NONE) ist, werden alle Protokolle von Parse SDK angezeigt. – ChunTingLin

1

Der Fehler war in dem Manifest; ParseBroadcastReceiver sollte ParsePushBroadcastReceiver

Snippet sein:

<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.hellboy.beat.PushRec" > 
    <intent-filter> 
     <action android:name="com.hellboy.beat.STATUS_DONE" /> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.USER_PRESENT" /> 
    </intent-filter> 
</receiver> 

Und das aus dem Manifest entfernen: im Receiver

<!-- Regular Push Notification --> 
    <!-- REMOVE THIS --> 
    <receiver android:name="com.parse.ParseBroadcastReceiver" /> 

auch:

public class PushRec extends ParsePushBroadcastReceiver 
{ 
} 

wird

public class PushRec extends BroadcastReceiver 
{ 
} 
Verwandte Themen