为库项目的XML文件中的intent指定targetPackage

时间:2013-09-20 19:17:37

标签: android android-intent package android-xml

我有一个图书馆项目,我用它来构建两个应用程序,一个是公共的,一个是个人使用的私有,只有少数设置对大多数人来说没用。在这个库项目中,我定义了一个PreferenceActivity(用于API< Honeycomb)和一些PreferenceFragments(用于API> = Honeycomb),使用本指南的首选项标题:http://developer.android.com/guide/topics/ui/settings.html#BackCompatHeaders

为了支持旧设备,我定义了这个XML文件,如指南所示:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <Preference 
        android:title="@string/base_de_donnees"
        android:summary="@string/summary_pref_restaurer_bdd_sd">
        <intent
            android:targetPackage="com.me.app_lib"
            android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
            android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_BDD" />
    </Preference>

   <Preference 
       android:title="@string/saisie"
       android:summary="@string/summary_pref_saisie">
       <intent
           android:targetPackage="com.me.app_lib"
           android:targetClass="com.me.app_lib.activities.preferences.SettingsActivity"
           android:action="com.me.app_lib.activities.preferences.SettingsActivity.ACTION_PREF_SASISIE" />

   </Preference>
</PreferenceScreen>

com.me.app_lib是库项目的包,其中定义了SettingsActivity。 但是,当从其中一个子项目调用intent时,我遇到崩溃,因为targetPackage与子项目的目标不匹配。如果我将com.me.app_lib更改为com.me.app_public(其中一个子项目的包)它可以工作,但由于我有两个子项目,所以这不是一个选项。

我是否必须将此文件复制到每个子项目并仅更改targetPackage行,还是有更好的选择?

1 个答案:

答案 0 :(得分:3)

我最后做的是将com.me.app_lib定义为资源字符串。 android:targetPackage属性变为:

android:targetPackage="@string/package_activity_preferences"

然后我可以在这个字符串的两个子项目中定义一个不同的值。这并不像我希望的那样干净,但至少我不需要在两个子项目中复制粘贴相同的文件。 targetClass是我的库项目的一部分,所以我不需要改变它的任何内容;只有targetPackage属性才有问题。