4

我有兩個類似的應用程序(一個免費,一個付費)。活動導出= false在活動選擇器中列出

的活性與exported="false"

<activity 
     android:name=".MyActivity" 
     android:exported="false" 
     android:noHistory="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="vnd.android.cursor.item/vnd.mine" /> 
     </intent-filter> 
    </activity> 

定義當我打電話startActivity從免費應用程序的適當的隱式意圖,出現活動選擇器。

我不明白,爲什麼從付費應用程序的活動出現,因爲它是exported="false"

我想我可以根據網址添加一個意圖過濾器,但我的問題是:爲什麼在做活動其他應用程序出現在文檔讀取

無論活性可以通過其他應用程序的組件推出

回答

5

我不知道下堅持爲什麼從付費應用程序的活動出現,因爲它是出口=「假」

因爲你有一個匹配<intent-filter>。由於您不需要將<intent-filter>用於非導出活動,因此只需將其刪除並在開始此活動時使用明確的Intent即可。

當文檔讀取爲什麼從其他應用程序的活動出現...

I had the same question,被告知,這是預期的行爲,該bug是在我們的應用程序對具有無用<intent-filter>。引述戴安娜Hackborn:

我會普遍認爲這在應用程序中的錯誤 - 如果你有,你是不是允許其他應用程序推出的活動,爲什麼赫克你發佈的意圖過濾器,他們將匹配嘗試啓動?活動的安全性(不是導出或需要許可)不是意圖匹配的一部分。 ...這種情況(發佈與其他應用程序將使用的意圖相匹配的活動,但將其限制爲不可由其他應用程序啓動)並不是有用的,如果不徹底破壞的話。

+0

再次給出一個很好的答案,儘管我對此並不滿意。我可以回覆這位親愛的Dianne Hackborn:我希望庫項目中的代碼是通用的,它定義了一個'AbstractActivity';免費的應用程序定義和活動「.MyActivity」,支付活動「.MyProActivty」,都具有相同的意圖過濾器。我通常會在繼承無法完成時考慮框架中的錯誤。 – rds

+0

解決方法:在抽象類中有一個返回類或顯式意圖的方法。 (在我的情況下,我真的不想這樣做) – rds

+0

@rds:「我希望庫項目中的代碼是通用的」 - 這不是真正的的作用。 *可以*這樣使用,與出口活動一起使用,但這不是它的最初目的。它應該是向操作系統和第三方宣傳您願意讓它們使用的功能的廣告。 – CommonsWare