2010-12-22 8 views
20

प्रतिस्थापित मैं अपने ऐप और केवल अपने अनुप्रयोग के लिए प्रसारण की जगह पैकेज पकड़ने की कोशिश कर रहा हूँ, लेकिन मेरी रिसीवर में किसी कारण से मैं हर अनुप्रयोग है कि अद्यतन किया जाता है के लिए प्रसारण कर रहा हूँ। मैंने सोचा कि आपको केवल अपने ऐप में मैनिफेस्ट फ़ाइल में इरादा फ़िल्टर सेट करने की आवश्यकता है, लेकिन शायद मैं गलत हूं?सही ढंग से कैसे फ़िल्टर करें पैकेज प्रसारण

 <receiver android:name=".UpdateReciever"> 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
      <data android:scheme="package" android:path="com.my.app" /> 
     </intent-filter> 
    </receiver> 

रिसीवर:

public class AppUpdateReciever extends BroadcastReceiver { 

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

     //code..  
    } 

} 
+0

मेरी परीक्षण, 'एंड्रॉयड से: पथ का हिस्सा अनावश्यक है। – ThomasW

+0

यदि आप फ़िल्टर में पथ प्रदान करते हैं तो रिसीवर में डेटा को फिर से जांचना अनावश्यक है। चेक [आशय और फिल्टर] (https://developer.android.com/guide/components/intents-filters.html) और [आप की आवश्यकता हो सकती उद्देश्य] (https://developer.android.com/reference/android/content /Intent.html#ACTION_PACKAGE_REPLACED) –

उत्तर

35

अपने onReceive विधि को यह करें:

if (intent.getDataString().contains("com.my.app")){ 
    ... 
} 

संपादित करें: ध्यान दें कि के लिए पंजीकरण

यहाँ मेरी कोड (प्रकट) है ACTION_PACKAGE_REPLACED वाई का कारण बनता है जब भी यह पहले से खुला नहीं होता है, तब भी हर ऐप को अपडेट होने पर हमारा ऐप शुरू किया जाएगा। मैं कैसे एपीआई 12 से पहले इस से बचने के लिए पता नहीं है, लेकिन एपीआई 12 में आप ACTION_MY_PACKAGE_REPLACED के लिए रजिस्टर कर सकते हैं ताकि आप आशय फिल्टर करने के लिए नहीं है और अपने अनुप्रयोग से अन्य एप्लिकेशन अपडेट की जा रही अनावश्यक रूप से शुरू कर दिया नहीं किया जाएगा।

+0

तो वहाँ केवल वर्तमान एप्लिकेशन के उद्देश्य के लिए रजिस्टर करने के लिए कोई रास्ता नहीं है? ऐसा लगता है एक गूगल डेवलपर (नाम "डायने Hackborn") का मानना ​​है कि यह संभव है: http://osdir.com/ml/Android-Developers/2009-11/msg04736.html –

+0

संकेत मिलता है कि एक तरह से नहीं था, लेकिन मैं कभी नहीं पता लगा लिया। हनीकोम्ब में, आप 'ACTION_PACKAGE_REPLACED' के साथ समस्या से बचने के लिए' ACTION_MY_PACKAGE_REPLACED' उपयोग कर सकते हैं: http://developer.android.com/reference/android/content/Intent.html#ACTION_MY_PACKAGE_REPLACED – Tenfour04

+0

हाँ, लेकिन मैं बड़ा नहीं मिल सकता है वैसे, तो मैंने जो किया है वह एक फॉलबैक है जो दोनों विधियों का उपयोग करता है, जैसा कि मैंने यहां दिखाया है: http://stackoverflow.com/a/21510561/878126। –

1

वैकल्पिक रूप से, अपने कोड है कि कई ऐप में शामिल होता है, या एक पुस्तकालय में है अगर तुम सिर्फ कुछ है कि प्रति हो सकती चाहते हैं/संपादन के बिना क्षुधा के बीच चिपकाया:

int intentUid = intent.getExtras().getInt("android.intent.extra.UID"); 
int myUid = android.os.Process.myUid(); 
if (intentUid == myUid) 
{ 
    ... 
}