2012-01-11 18 views
7

मेरे पास एक कामकाजी सी 2 डीएम एप्लीकेशन था। नया सी 2 डीएम एप्लिकेशन बनाते समय मैंने उसी पैकेज नाम का पुन: उपयोग किया।सी 2 डीएम ब्रॉडकास्ट रिसीवर

यह अब काम करता है जब ब्रॉडकास्ट रिसीवर को एप्लिकेशन नहीं चलने पर कॉल नहीं किया जाता है। यह कहना है कि अगर मैं एप्लिकेशन चलाता हूं और इसे सी 2 डीएम संदेश भेजता हूं तो यह सब काम करता है। लेकिन एक बल के बाद ब्रॉडकास्ट रिसीवर को अब नहीं बुलाया जाता है।

मैंने कई उदाहरण देखे हैं और मेरे पुराने मैनिफेस्ट में सब कुछ की तुलना नए से की है। श्रेणियों, इराद सेवाओं, आदि में उपयोग किए गए पैकेज नामों पर अतिरिक्त ध्यान देना ..

प्रश्न: क्या कोई सामान्य सी 2 डीएम कोडिंग/कॉन्फ़िगर गलती है जिसके परिणामस्वरूप ब्रॉडकास्ट रिसीवर को ऐप के बाद बुलाया जा रहा है?

01-11 00: 54: 43.580:

मैं बल के बाद अपने आवेदन की छोड़ने जब मैं एक C2DM संदेश भेजने के इस लॉग बिल्ली मिलता है चेतावनी/GTalkService (286): [DataMsgMgr] प्रसारण आशय कॉलबैक: परिणाम = CentLED forIntent {act = com.google.android.c2dm.intent.RECEIVE cat = [com.aawwpcd.pcd3] (अतिरिक्त है)}

मुझे डिवाइस पर भेजे गए प्रत्येक C2DM संदेश के लिए उनमें से एक मिलता है आवेदन छोड़ने के बल के बाद।

ऐसा लगता है कि इरादा आ रहा है लेकिन मेरे ब्रॉडकास्ट रिसीवर को पास नहीं किया जा रहा है।

संपादित करें:

यहाँ प्रकट और BroadcastReceiver से प्रासंगिक बिट्स हैं:

BroadcastReciever

package com.aawwpcd.pcd3.c2dm; 

import ... 

public class C2DMBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public IBinder peekService(Context myContext, Intent service) { 
     return super.peekService(myContext, service); 
    } 

    public C2DMBroadcastReceiver() { 
     super(); 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 

    ... 

    } 

} 

प्रकट

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.aawwpcd.pcd3" 
     android:versionCode="250" 
     android:versionName="ICSPCD3"> 

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

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

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WAKE_LOCK"/> 

<application android:name=".PCD3Application" 
      android:label="@string/app_name" 
      android:icon="@drawable/pcdlauncher" 
      android:theme="@android:style/Theme.Holo"> 

    <activity android:name=".honeycombpcd3.FullScheduleActivity" 
       android:label="@string/app_namefull" 
      > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 

    </activity> 

    <!-- Only C2DM servers can send messages for the app. If permission is not 
    set - any other app can generate it --> 
    <receiver android:name=".c2dm.C2DMBroadcastReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND"> 

     <!-- Receive the actual message --> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
      <category android:name="com.aawwpcd.pcd3"/> 
     </intent-filter> 

     <!-- Receive the registration id --> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> 
      <category android:name="com.aawwpcd.pcd3"/> 
     </intent-filter> 

    </receiver> 

</application> 

</manifest> 

संपादित करें: क्या यह 3.x में कुछ नया हो सकता है? जैसा कि ऊपर बताया गया है, इस समस्या के साथ मेरी समस्याएं शुरू हुईं - 3.x के लिए लिखी गईं। मैं चाहता हूं कि सी 2 डीएम ब्रॉडकास्ट रिसीवर को कॉल करने के लिए भी है जब भी एप्लिकेशन नहीं चल रहा हो। मैं उसे नहीं देख रहा हूँ। क्या यह 3.x परिवर्तन हो सकता है? यह 2.3.x फोन से पहले इस तरह से काम करता था और मुझे कुछ भी नहीं मिल रहा है जो मैं अलग कर रहा हूं। यह साबित करने के लिए टेस्ट कोड लिखना परेशानी होगी लेकिन यह मुझे लगता है।

संपादित करें: फोर्स क्विट से संबंधित लगता है। जब मैं .apk को पुन: स्थापित करता हूं और तब डिवाइस को c2dm संदेश भेजता हूं तो मुझे कोई समस्या नहीं है; ब्रॉडकास्ट रिसीवर इसे उठाता है। इस मामले में जब तक सी 2 डीएम आया था तब तक एप्लिकेशन पहले से नहीं चल रहा था। एकमात्र समस्या यह है कि मैं आवेदन छोड़ने के बाद मजबूर हूं। इसके बाद सी 2 डीएम संदेश ब्रॉडकास्ट रिसीवर द्वारा नहीं उठाए जाते हैं।

+1

अपने मेनिफेयर के '<रिसीवर ... />' टैग और अपने रिसीवर क्लास के पैकेज – Jin35

+0

समान समस्या प्रदान करें और मैंने इसे ठीक करने के लिए चीजों का एक गुच्छा करने की कोशिश की है। आपको यह ध्यान देने की सराहना करें कि यह केवल बल के करीब –

उत्तर

1

क्या आप अपने रिसीवर को कुछ बार "बलपूर्वक छोड़ने" के बाद लॉगकैट की निगरानी कर रहे हैं? ऐसा लगता है कि आपको एक "खराब प्रक्रिया" संदेश दिखाई देगा जिसका अर्थ यह है कि आपका रिसीवर कई बार दुर्घटनाग्रस्त हो गया है और एंड्रॉइड अब इसे इरादे नहीं भेजेगा। फ़ोन को पुनरारंभ करना/एप्लिकेशन को पुनर्स्थापित करना इस समस्या को ठीक करता है जैसा आपने अपने संपादन में निहित किया है।

+0

है "कोई भी खराब प्रक्रिया" संदेश नहीं है। मुझे लगातार व्यवहार मिल रहा है: यह तब तक काम करता है जब तक कि मैं एप्लिकेशन को छोड़ने के लिए मजबूर नहीं करता। काम करके मेरा मतलब है कि ब्रॉडकास्ट रिसीवर द्वारा सी 2 डीएम संदेशों को उठाया जाता है, इस पर ध्यान दिए बिना कि एप्लिकेशन पहले से चल रहा है या नहीं, जब तक कि मैं इसे छोड़ने के लिए मजबूर नहीं करता; एक बल के बाद सी 2 डीएम संदेशों को ब्रॉडकास्ट रिसीवर को वितरित नहीं किया जाता है। – Ayyrk

10

https://stackoverflow.com/a/7108611

पर और Android 3 पर एक नजर डालें।1 रिलीज नोट http://developer.android.com/about/versions/android-3.1.html#launchcontrols

3.1, बल के रूप में ऐप्स को डिफ़ॉल्ट रूप से C2DM द्वारा पुनरारंभ नहीं किया गया। बल-बंद होने के बाद पुनरारंभ करने का अनुरोध करने के लिए एक नया ध्वज है।

+0

यदि डिवाइस रीबूट के बाद मुझे एक ही परिणाम मिलता है तो क्या होगा? –

1

पुश अधिसूचना उत्पन्न करने के लिए जो आप बना रहे हैं, उसके लंबित इरादे में बस नीचे झंडा जोड़ें।

intent.addFlags (Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

इसे पोस्ट करना चाहिए।

+0

यह मेरे लिए काम किया। डीबगर के बिना भी ऐप चलाने के लिए, भले ही आप इसे बाद में छोड़ दें, लेकिन यह केवल एक्समरिन एंड्रॉइड लोगों पर लागू हो सकता है। – hvaughan3

-1

यदि आपके फोन में अनुमति प्रबंधक है। अपने ऐप के लिए ऑटोस्टार्ट अनुमतियां चालू करें। Google अपने फोन के लिए ऐसा कैसे करें।

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