15

アプリケーションのデフォルト パッケージは「example.app」です。

対象アクティビティのパッケージは「example.app.abc」です。

Javaコードで「example.app.abc.TheActivity」のstartActivity()を呼び出すだけで機能します。

ただし、preference.xml で指定しても機能しません。

<PreferenceScreen android:key="key"
    android:title="@string/title"
>
    <intent android:action="android.intent.action.MAIN"
        android:targetPackage="example.app.abc"
        android:targetClass="TheActivity"
/>
</PreferenceScreen>

android:targetClass="example.app.abc.TheActivity" を試しましたが、うまくいきません。

デフォルト以外のパッケージのアクティビティを優先的に開始することはできませんか?

4

2 に答える 2

30

AccountManager アカウント設定のライブラリ プロジェクトからカスタム設定画面を使用しようとしたときに、同じ問題に遭遇しました。targetPackage および targetClass 属性をどのように調整しようとしても、例外がスローされます (ただし、これはアカウントであるため、電話がクラッシュします)。

これは Android の制限であると想定する必要があると思います。不器用ですが、実際に行う必要があるのは、アプリケーションの名前空間内でアクティビティのラッパー クラスを宣言することだけです。

public class MyPreferences extends ActualPreferences {
}

AndroidManifest.xml で宣言します

<activity android:name=".MyPreferences"/>

次に、インテントでクラスを指定できます

<intent android:targetPackage="com.my.package"
        android:targetClass="com.my.package.MyPreferences" />

ちなみに、少なくともアカウント設定に関しては、構文は非常に面倒です。これらのバリエーションはすべて失敗します。

<!-- fails --> <intent android:targetClass="com.my.package.MyPreferences" />
<!-- fails --> <intent android:targetClass="MyPreferences" 
                       android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass=".MyPreferences"
                       android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass="settings.MyPreferences"
                       android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass=".settings.MyPreferences"
                       android:targetPackage="com.my.package"/>
<!-- fails --> <intent android:targetClass="com.my.other.package.MyPreferences"
                       android:targetPackage="com.my.package"/>

重要な要素は明らかに、android:targetPackage属性がアプリケーション パッケージと一致することです。必要に応じて、アクティビティをサブパッケージに入れることができます。これは機能します:

<intent android:targetPackage="com.my.package"
        android:targetClass="com.my.package.settings.MyPreferences" />
于 2012-06-04T21:09:46.977 に答える