1

いくつかの異なるアプリ(NFCTagInfoNXPによるNFCTagInfoなど)を見たことがあります。これらのアプリは、設定でそのオプションが設定されている場合にのみ、タグがタッチされたときに自動起動する(または[アプリの選択]リストに表示される)オプションがあります。それ以外の場合は、インテントフィルターがシステムによって完全に無視されているように見えます。

これはAndroidアプリケーションでどのように行うことができますか?

4

2 に答える 2

7

完全な答えは<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速度にも依存します)。

于 2012-07-07T22:30:00.440 に答える
1

とを使用し<intent-filter>て、無視したいコンポーネントを無効にすることができます。PackageManagersetComponentEnabledSetting()

于 2012-07-06T21:57:57.197 に答える