2015-11-18 35 views
-1

在我的應用程序,我想檢測時,我的包被替換,所以我有一個以這種方式使一個接收器:Android的工作室:元素接收器複製

 <receiver 
     android:name="com.x.y.ApplicationsReceiver" 
     android:enabled="@bool/is_at_most_api_11" > 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 
    <receiver 
     android:name="com.x.y.ApplicationsReceiver" 
     android:enabled="@bool/is_at_least_api_12" > 
     <intent-filter> 
      <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
     </intent-filter> 
    </receiver> 

當從Eclipse來導入我的項目Android Studio中,我得到了以下錯誤:

Element receiver#com.x.y.ApplicationsReceiver at AndroidManifest.xml duplicated with element declared at AndroidManifest.xml. 

任何想法如何,我可以解決給定的帽子,我需要根據Android的API級別,以使接收器針對不同的意圖過濾器,這個問題?

+0

logcat清楚地表明,您在具有相同名稱的清單文件中有重複的接收器。 – Emil

回答

0

問題發生是因爲在AndroidManifest中兩次添加了相同的類用於爲不同的Action註冊BroadcastReceiver。

做得一樣通過增加單BroadcastReceiver一個以上的操作:在ApplicationsReceiver類的onReceive方法現在

<receiver 
     android:name="com.x.y.ApplicationsReceiver" 
     android:enabled="@bool/is_at_most_api_11" > 
     <intent-filter> 
      <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
      <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
      <data android:scheme="package" /> 
     </intent-filter> 
    </receiver> 

從意向獲取行動,做什麼要根據API級別做:

@Override 
public void onReceive(Context context,Intent intent) { 
    String action=intent.getAction(); 
    if(action.equalsIgnoreCase("android.intent.action.MY_PACKAGE_REPLACED")){ 
     // do your code here 
    }else{ 
     // do your code here 
    } 
    }