いくつかの異なるアプリ(NFCTagInfoやNXPによるNFCTagInfoなど)を見たことがあります。これらのアプリは、設定でそのオプションが設定されている場合にのみ、タグがタッチされたときに自動起動する(または[アプリの選択]リストに表示される)オプションがあります。それ以外の場合は、インテントフィルターがシステムによって完全に無視されているように見えます。
これはAndroidアプリケーションでどのように行うことができますか?
いくつかの異なるアプリ(NFCTagInfoやNXPによるNFCTagInfoなど)を見たことがあります。これらのアプリは、設定でそのオプションが設定されている場合にのみ、タグがタッチされたときに自動起動する(または[アプリの選択]リストに表示される)オプションがあります。それ以外の場合は、インテントフィルターがシステムによって完全に無視されているように見えます。
これはAndroidアプリケーションでどのように行うことができますか?
完全な答えは<activity-alias>
、次のようにアプリのマニフェストでを使用することです。
<activity-alias
android:name=".ActivityAlias"
android:targetActivity=".YourActualActivity"
android:enabled="false" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
YourActualActivity
インテントフィルターをオンまたはオフにできるようにするクラスです。アクティビティ全体を無効にしたくないので、有効にするインテントフィルタを配置するアクティビティエイリアスを使用します(ここではデフォルトで無効になっています)。
PreferenceActivityで、特定の設定が変更されたときに呼び出されるリスナーを設定します。次に、次のようなことを行います。
getPackageManager().setComponentEnabledSetting(
new ComponentName("your.package.name", "your.package.name.ActivityAlias"),
changedBooleanPreference ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED :
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
changedBooleanPreference
変更された設定は次のとおりです。
パッケージマネージャーが変更を有効にするまでに時間がかかる場合があることに注意してください。それはAndroidのバージョンに依存し、それがいつどのくらいの速さで発生するか(そしておそらくデバイスのCPU速度にも依存します)。
とを使用し<intent-filter>
て、無視したいコンポーネントを無効にすることができます。PackageManager
setComponentEnabledSetting()