1. 程式人生 > >Android的BroadcastReciver收不到Broadcast(系統廣播)的原因之一

Android的BroadcastReciver收不到Broadcast(系統廣播)的原因之一

原文地址:http://blog.csdn.net/huangxiaohu_coder/article/details/7106014   

 是不是有時候發覺有時候Android的broadcastReciver重寫正確,IntentFilter定義正確,新增Action正確,。。可能正確,註冊IntentFileter也是正確,正確,正確,都是正確,但依然收不到想要收到的broadcastReciver,或許你只是忘記addDataScheme這一點點,試一試,說不定你就能收到遲來的broadcast。至於為什麼要新增這個,請參看這篇文章,講得還是很清楚和很詳細的哦,地址:http://blog.csdn.net/silenceburn/article/details/6083375

    下面是我從Android原始碼收集的幾段addDataScheme:

    1.mediaScanner相關的:

[java] view plain copy  print?
  1. IntentFilter intentFilter =  
  2.         new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);  
  3. intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);  
  4. intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);  
  5. intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);  
  6. intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);  
  7. intentFilter.addDataScheme("file");  

    2.package相關的:

[java] view plain copy  print?
  1. filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);  
  2. filter.addAction(Intent.ACTION_PACKAGE_REMOVED);  
  3. filter.addAction(Intent.ACTION_PACKAGE_CHANGED);  
  4. filter.addDataScheme("package");  

    3.sms相關的:

[java] view plain copy  print?
  1. intentFilter.addAction(Intents.DATA_SMS_RECEIVED_ACTION);  
  2. intentFilter.addDataScheme("sms");  

    原始碼便是最好的註釋,現在想想,真的還是有道理的。