2014-10-02 8 views
38

मैं Parse push Android SDK 1.7.0 सेटअप करता हूं और बिना किसी समस्या के धक्का प्राप्त कर सकता हूं। हालांकि, जब निम्न अपवादों के साथ पुश अधिसूचना मेरी ऐप्लिकेशन क्रैश खोलने:पार्स पुश अधिसूचना खोलने पर अपवाद

android.content.ActivityNotFoundException कोई गतिविधि नहीं आशय {कार्य को संभालने के लिए मिला = android.intent.action.VIEW Dat = FLG = 0x1000c000 ( अतिरिक्त)}

मैं भी getActivity() हमेशा मुख्य गतिविधि वर्ग, एक ही परिणाम लौटने के साथ ParsePushBroadcastReceiver उपवर्गीकरण की कोशिश की है। नीचे पूर्ण स्टैकट्रैक है:

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.ers.test, PID: 13513 
java.lang.RuntimeException: Unable to start receiver com.ers.test.MyPushBroadcastReceiver: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= flg=0x1000c000 (has extras) } 
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2452) 
     at android.app.ActivityThread.access$1700(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5146) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= flg=0x1000c000 (has extras) } 
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632) 
     at android.app.Instrumentation.execStartActivitiesAsUser(Instrumentation.java:1481) 
     at android.app.ContextImpl.startActivitiesAsUser(ContextImpl.java:1136) 
     at android.content.ContextWrapper.startActivitiesAsUser(ContextWrapper.java:344) 
     at android.content.ContextWrapper.startActivitiesAsUser(ContextWrapper.java:344) 
     at android.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:221) 
     at android.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:232) 
     at android.app.TaskStackBuilder.startActivities(TaskStackBuilder.java:208) 
     at com.parse.TaskStackBuilderHelper.startActivities(TaskStackBuilderHelper.java:19) 
     at com.parse.ParsePushBroadcastReceiver.onPushOpen(ParsePushBroadcastReceiver.java:202) 
     at com.parse.ParsePushBroadcastReceiver.onReceive(ParsePushBroadcastReceiver.java:108) 
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2445) 
     at android.app.ActivityThread.access$1700(ActivityThread.java:144) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5146) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
     at dalvik.system.NativeStart.main(Native Method) 
+0

वांछित गतिविधि के लिए '' जोड़ना मदद नहीं करता है। –

+0

कोई कामकाज? –

उत्तर

101

कुछ घंटों खर्च करने के बाद। एक समाधान मिला: अपने रिसीवर को कार्यान्वित करें और ParsePushBroadcastReceiver कक्षा को बढ़ाता है।

Receiver.java

public class Receiver extends ParsePushBroadcastReceiver { 

    @Override 
    public void onPushOpen(Context context, Intent intent) { 
     Log.e("Push", "Clicked"); 
     Intent i = new Intent(context, HomeActivity.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 
} 

परियोजना के प्रदर्शन में के लिए कोड प्रकट, (ParsePushBroadcastReceiver उपयोग करने के बजाय) में यह प्रयोग करें:

<receiver 
      android:name="your.package.name.Receiver" 
      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> 

मुबारक कोडिंग !!

+0

यह काम करता है! हालांकि मेरा इरादा बनाने का मतलब है कि मैं अतिरिक्त (com.parse.Data और com.parse.Channel) में सभी डेटा खो रहा हूं, उन्हें उनको कॉपी करना होगा। यह देखने की प्रतीक्षा कर रहा है कि अगली एसडीके रिलीज में यह सुधार हुआ है या नहीं। –

+1

इससे पहले 1.5 का उपयोग कर रहा था और सबकुछ ठीक काम करता था। 1.7 पर अपडेट किया गया और समस्या – Zen

+1

Thnx साथी होने लगती है! नए पार्स पुश ट्यूटोरियल ने हैंडलर को गतिविधि को बाध्य करने का कोई संकेत नहीं दिया। – nahwarang

31

इस अपवाद का कारण है जब ParsePushBroadcastReceiver इस कोड में अपने पुश संदेश में खाली uri खोलने के लिए चाहता है:

String uriString = null; 
    try 
    { 
     JSONObject pushData = new JSONObject(intent.getStringExtra("com.parse.Data")); 
     uriString = pushData.optString("uri"); 
    } 
    catch (JSONException e) 
    { 
     Parse.logE("com.parse.ParsePushReceiver", "Unexpected JSONException when receiving push data: ", e); 
    } 
    if (uriString != null) { 
      activityIntent = new Intent("android.intent.action.VIEW", Uri.parse(uriString)); 
     } else { 
      activityIntent = new Intent(context, cls); 
     } 

तुम सिर्फ एक संदेश पुश करते हैं, uriString खाली रिक्त नहीं हो जाएगा, context.startActivity(activityIntent); तो एक खाली यूरी खुल जाएगा और अपवाद होता है।

इस मुद्दे आप ParsePushBroadcastReceiver (@Ahmad रजा करने के लिए धन्यवाद) उपवर्ग और इस तरह onPushopen ओवरराइड कर सकते हैं हल करने के लिए: इस तरह

public class Receiver extends ParsePushBroadcastReceiver { 

    @Override 
    protected void onPushOpen(Context context, Intent intent) { 

     ParseAnalytics.trackAppOpenedInBackground(intent); 

     String uriString = null; 
     try { 
      JSONObject pushData = new JSONObject(intent.getStringExtra("com.parse.Data")); 
      uriString = pushData.optString("uri"); 
     } catch (JSONException e) { 
      Log.v("com.parse.ParsePushReceiver", "Unexpected JSONException when receiving push data: ", e); 
     } 
     Class<? extends Activity> cls = getActivity(context, intent); 
     Intent activityIntent; 
     if (uriString != null && !uriString.isEmpty()) { 
      activityIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriString)); 
     } else { 
      activityIntent = new Intent(context, MainActivity.class); 
     } 
     activityIntent.putExtras(intent.getExtras()); 
     if (Build.VERSION.SDK_INT >= 16) { 
      TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
      stackBuilder.addParentStack(cls); 
      stackBuilder.addNextIntent(activityIntent); 
      stackBuilder.startActivities(); 
     } else { 
      activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      context.startActivity(activityIntent); 
     } 
    } 
} 

और अद्यतन मैनिफ़ेस्ट:

<receiver 
      android:name="your.package.name.Receiver" 
      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> 

मुझे आशा है कि वे का समाधान उनके अगले अपडेट में समस्या।

+0

शुरू किया गया है क्या मैं बस कह सकता हूं कि मैं इस पारसे पुश को दो सप्ताह से अधिक समय तक काम करने की कोशिश कर रहा हूं। सब कुछ करने की कोशिश की और लगभग मेरे दिमाग खो दिया !!! आप सर @ वीरुसमैन एक पूर्ण किंवदंती हैं! मुझे समझ में नहीं आया कि यह मेरे लिए क्यों काम करता था लेकिन ऐसा हुआ! धन्यवाद!! – SmiffyKmc

संबंधित मुद्दे