15

我在 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

4 回答 4

33

您既不能以<intent-filter>编程方式启用、禁用或创建 s。

但是,在您的情况下,<intent-filter>每个组件只有一个。在这种情况下,您可以通过和以编程方式启用和禁用组件。在您的情况下,启用或禁用活动将具有与启用或禁用其.PackageManagersetComponentEnabledSetting()<intent-filter>

于 2013-01-03T15:45:47.913 回答
10

如果您的 Activity 有多个s,那么您可以通过创建一个您想要禁用的 Activity 并仅禁用 Activity 别名来禁用intent-filter特定的。请参阅:https ://developer.android.com/guide/topics/manifest/activity-alias-element.htmlintent-filteractivity-aliasintent-filter

于 2017-09-27T10:05:05.767 回答
6

意图过滤器是 IntentFilter 类的一个实例。但是,由于 Android 系统在启动该组件之前必须知道该组件的功能,因此 Intent 过滤器通常不在 Java 代码中设置,而是在应用程序的清单文件 (AndroidManifest.xml) 中作为元素设置。(一个例外是通过调用 Context.registerReceiver() 动态注册的广播接收器的过滤器;它们直接创建为 IntentFilter 对象。)

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

另外,请参阅:https ://stackoverflow.com/a/10403074/832776

于 2013-01-03T15:45:19.533 回答
1

我所做的是registerReciever

registerReceiver(this.broadcastReceiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));

注销广播接收器

if (this.broadcastReceiver != null) {
        unregisterReceiver(this.broadcastReceiver);
    }
于 2020-12-22T12:44:21.397 回答