6

爲什麼OrderedBroadcast可以在應用程序的調試版本中工作,但不能在發佈版本中工作?我送以下OrderedBroadcast:Android OrderedBroadcast不能在發佈版本中工作

context.sendOrderedBroadcast(sendInt, "xxx.xxxx.permission.API", new BroadcastReceiver() { 
     @SuppressLint("NewApi") 
     @Override 
     public void onReceive(Context receivercontext, Intent intent) { 
       Bundle results = getResultExtras(true); 
       if (results.getInt("Result", Activity.RESULT_CANCELED) == Activity.RESULT_OK) { 
        Log.d("DEBUG", "OK"); 
       } else { 
        Log.e("DEBUG", "Failed"); 
       } 
     } 
}, null, Activity.RESULT_OK, null, null); 

這兩個應用程序都在AndroidManifest.xml文件中適當的權限和接收聲明如下:

<receiver android:name="xxx.xxxx.xxxx.Receiver1" 
      android:enabled="true" 
      android:exported="true" 
      android:permission="xxx.xxxx.permission.API"> 
      <intent-filter> 
       <action android:name="xxx.xxxx.permission.API.1" /> 
      </intent-filter> 
</receiver> 

正如我所說,如果我有發送方和接收器應用程序在調試版本中運行,然後一切正常,但如果我運行接收器應用程序在發佈模式(沒有proguard或任何東西)發件人應用程序只是得到RESULT_CANCELLED結果?

這已經給我留了好幾天的時間,所以任何想法都將不勝感激。

+0

權限問題?在''中添加權限,剛剛發現它[這裏](http://developer.android.com/intl/es/reference/android/content/BroadcastReceiver.html#Security) – calvinfly

+0

你是依靠結果值?接收器觸發器的接收器?或執行? – Elltz

+0

該權限已被使用,我已經重新檢查了這些,我依靠接收來自第二個應用的OK響應,接收器不會觸發或執行,除非我在調試模式下運行接收器應用程序? – Apqu

回答

1

好了,所以經過一番搜索和試驗結果證明它是安卓造成這個錯誤比較簡單但煩人的安全功能:

已安裝只能接收和行爲上的廣播(無論是正常還是應用如果它是第一次在設備上打開,則命令廣播)。在我的情況下,調試版本在運行時自動打開,但發佈版本不是,它沒有任何應用程序圖標僅作爲主應用程序的擴展,因此從未打開過。

因此,修正是爲接收應用程序提供應用程序圖標,並確保它在設備上運行。奇怪的是,在logcat中沒有產生安全錯誤,除非你知道這種事情,否則很難調試!

0

聽起來像當你聲明權限時,你正在使用android:protectionLevel="signature"。如果您在調試中運行發送方,則會使用您的調試密鑰進行簽名。接收器將使用釋放密鑰進行簽名。因此,簽名將不匹配,並且接收者將不會被授予權限。

您需要在發佈模式下運行,以便它們都使用相同的密鑰進行簽名。

+0

非常感謝您的回答我會在早上回到我的電腦,所以會檢查是否是問題,如果是的話,我會標記爲答案並獎勵賞金,再次感謝 – Apqu

相關問題