2009-10-20 13 views
5

मैं पैकेज ईवेंट के लिए प्रसारण ईवेंट प्राप्त करने के लिए ब्रॉडकास्ट रिसीवर पंजीकृत करने का प्रयास कर रहा हूं। मैनिफेस्ट फ़ाइल में कोड और मेरा रिसीवर निम्नलिखित है। लॉग स्टेटमेंट कभी नहीं होता है, लेकिन मैं "होमलोडर्स" (लॉन्चर) डीबग कथन के लिए एक ही प्रसारण फायरिंग को स्पष्ट रूप से देख सकता हूं। मैं क्या खो रहा हूँ?पैकेजेज इरादों के लिए प्रसारण प्राप्त नहीं कर सकते

public class IntentListener extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.i("INTENT LISTNER:", intent.getAction()); 
    } 
} 

<receiver android:name="IntentListener" android:enabled="true" android:exported="true"> 
    <intent-filter> 
     <data android:scheme="package"></data> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_ADDED"></action> 
     <action android:name="android.intent.action.PACKAGE_CHANGED"></action> 
    </intent-filter> 
</receiver> 
+1

त्रुटि com.android.samples.app.IntentListener की बजाय IntentListener में हो सकती है? – Zorb

उत्तर

4

यह है कि इन Intent रों प्रकट में पंजीकृत घटकों द्वारा प्राप्त नहीं किया जा सकता संभव है, लेकिन केवल registerReceiver() के माध्यम से जावा में पंजीकृत रिसीवर द्वारा।

+0

हाँ मुझे यकीन है कि मामला है, जिज्ञासा से यह मामला क्यों है? मुझे इसका कोई सुरक्षा प्रभाव नहीं दिख रहा है? –

+3

जैसा कि मैंने एक दिन या उससे पहले एक और एसओ सवाल पर टिप्पणी की थी, एंड्रॉइड हर समय एक नया घटक शुरू करना नहीं चाहता है। एक मामला जिसे मैं जानता था बैटरी घटनाओं के लिए था (उदा। ACTION_BATTERY_LOW)। ऐसा लगता है कि SCREEN_OFF (और शायद SCREEN_ON) अन्य हैं। यदि आप इसके बारे में सोचते हैं, और आप इसे रजिस्टर रिसीवर() के साथ काम करते हैं, तो इस मुद्दे पर वापस झुकें। मुझे लगता है कि मुझे इस विषय को ब्लॉग पोस्ट और/या पुस्तक अनुभाग में शामिल करने की आवश्यकता है, और दुर्भाग्य से नो-मैनिफेस्ट-रिसीवर इरादों की सूची अनियंत्रित है। – CommonsWare

+1

मैं देखना चाहता हूं कि यह कहां दस्तावेज है। मैंने स्रोत का निरीक्षण किया है और इन संरक्षित प्रसारणों के खिलाफ एकमात्र जांच है इसलिए एक गैर प्रणाली प्रक्रिया प्रसारण शुरू नहीं कर सकती है। मैंने केवल इस प्रक्षेपण के लिए स्रोत रजिस्टर में अन्य संकुल भी देखे हैं। – James

0

यह मेरा प्रकट होता है, बिना

<category android:name="android.intent.category.DEFAULT" /> 

मेरा ऐप केवल Android Market एप्लिकेशन इंस्टॉल का पता लगाता है, लेकिन नहीं निकालता है। अब यह गैर-एंड्रॉइड मार्केट ऐप प्रसारण भी प्राप्त करता है।

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:label="@string/app_name" 
     android:name=".SomeActivity" > 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

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

    <receiver android:name="com.som.pakage.PackageInstallReceiver" > 
     <intent-filter > 
      <action android:name="android.intent.action.PACKAGE_ADDED" /> 
      <action android:name="android.intent.action.PACKAGE_REMOVED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 
</application> 
0

इन तीन उद्देश्यों अर्थात्,

Intent.ACTION_PACKAGE_ADDED 
Intent.ACTION_PACKAGE_REMOVED 
Intent.ACTION_PACKAGE_CHANGED 

जब प्रणाली द्वारा प्रसारित,

Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT 

झंडा जोड़ा ताकि केवल पंजीकृत रिसीवर प्रसारण और बिना प्रसारण रिसीवर घटकों प्राप्त होगा है लॉन्च किया जायेगा। अधिक जानकारी के लिए स्रोत का उद्देश्य और पैकेज प्रबंधक सेवा वर्ग का संदर्भ लें।

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