2013-01-03 27 views
6

我在Android Manifest中爲他們提供了三個活動和三個意圖過濾器。如何通過可編程方式創建/禁用意圖過濾器?

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter>     
    </activity> 
    <activity 
     android:name=".firstActivity" 
     android:theme="@style/AppTheme" 
     android:label="@string/first"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".secondActivity" 
     android:theme="@style/AppTheme" 
     android:label="@string/second"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".thirdActivity" 
     android:theme="@style/AppTheme" 
     android:label="@string/third"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity ></application> 

如何根據選項禁用意圖過濾器可編程?或者我可以通過代碼創建新的意圖過濾器?

謝謝。

回答

4

意圖過濾器是IntentFilter類的一個實例。但是,由於Android系統必須知道 組件在啓動該組件之前的功能,因此一般不會在Java代碼中設置 ,而是在應用程序的清單文件(AndroidManifest.xml)中設置 文件(AndroidManifest.xml)作爲元素。 (該一個 例外將是被動態調用Context.registerReceiver()註冊 廣播接收機濾波器,它們是直接作爲IntentFilter的對象創建 。)

源:http://developer.android.com/guide/components/intents-filters.html

另外,請參閱:https://stackoverflow.com/a/10403074/832776

19

您不能以編程方式啓用,禁用或創建<intent-filter>

但是,對於您的情況,每個組件只有一個<intent-filter>。在這種情況下,您可以通過PackageManagersetComponentEnabledSetting()以編程方式啓用和禁用組件。在你的情況下,啓用或禁用該活動將具有與啓用或禁用其<intent-filter>相同的基本效果。

+0

IntentFilter.create和Context.registerResolver怎麼樣? http://developer.android.com/reference/android/content/IntentFilter.html#create –

+0

@Koren:沒有'registerResolver()'方法。你可能會想'registerReceiver()'。這可以用於'BroadcastReceivers',但OP正在查詢活動。而且,'registerReceiver()'只在你的進程運行時才起作用,而''即使在你的進程沒有運行時也能起作用。 – CommonsWare

+0

是的我在說registerReceiver對不起 –

相關問題