おそらく最善の解決策は、NFC フォアグラウンド ディスパッチを使用することです。ただし、マニフェスト ファイルのインテント フィルターをオフにするには、マニフェスト内の<activity-alias>
要素を使用します。<activity-alias>
要素自体の代わりにIntent フィルターを配置<activity>
することで、アプリで自由に無効化および有効化できます。
マニフェストに次のものがあるとします。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.app.package">
...
<activity-alias android:name=".yourActivityAlias"
android:enabled="true" android:targetActivity=".yourActivity">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
....
</manifest>
<activity-alias>
次に、アプリのアクティビティから次の方法で無効にできます。
PackageManager pkgMgr = getPackageManager();
ComponentName comp = new ComponentName("your.app.package", "your.app.package.yourActivityAlias");
pkgMgr.setComponentEnabledSetting(comp, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
新しい設定は、アプリの再起動時にのみ有効になることに注意してください (そのため、PackageManager.DONT_KILL_APP の代わりに 0 を検討することをお勧めします)。また、packagemanager が新しい設定を有効にするのに少し時間がかかることがよくあります (おそらく、デバイスの処理速度に依存します)。