android.intent.category.DEFAULT和android.intent.category.PREFERENCE有什么不同?

时间:2018-05-30 02:01:05

标签: android

我使用openActivity<MyPreferenceActivity>()在Kotlin的Android Studio 3.1.2中创建一个Preference UI。

似乎代码A和代码B都可以正常运行。

android.intent.category.DEFAULTandroid.intent.category.PREFERENCE之间有何不同?谢谢!

代码A

<activity android:name="ui.MyPreferenceActivity">
    <intent-filter>
        <action android:name="ui.MyPreferenceActivity" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

代码B

        <activity android:name="ui.MyPreferenceActivity">
            <intent-filter>
                <action android:name="ui.MyPreferenceActivity" />
                <category android:name="android.intent.category.PREFERENCE" />
            </intent-filter>
        </activity>

两者

class MyPreferenceActivity : PreferenceActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        fragmentManager.beginTransaction().replace(android.R.id.content, MyPreferenceFragment()).commit()
    }

    class MyPreferenceFragment : PreferenceFragment() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            addPreferencesFromResource(R.xml.aa)
        }
    }
}

1 个答案:

答案 0 :(得分:2)

使用意图过滤器的目的是隐式意图。如果您的活动是由没有为其分配特定类别的隐式意图启动的,则其Intent过滤器应包括清单文件中提到的类别。

  

似乎代码A和代码B都可以正常运行。

这是正确的。即使将其定义为Manifest文件中的不同意图活动过滤器和类别,也可以通过活动“X”复制相同的代码和功能。就像我上面提到的,intent过滤器的目的是使用隐式intent。如果您在清单中将其定义为首选项类别意图,则在启动Preference类型的隐式意图时将调用活动X.

  

android.intent.category.DEFAULT和android.intent.category.PREFERENCE之间有什么不同

android.intent.category.DEFAULT是隐式intent的默认类别(AS中没有任何特定角色),而当需要调用a的隐式intent时,将调用定义为android.intent.category.PREFERENCE的活动偏好活动/片段/小组。