0

私はこのようにインテントをフィルタリングします

<intent-filter>    
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />

今問題は、モバイルの近くでNdefタグを発見すると、アプリケーションに実装したイベントが実行されていることです(アプリケーションが閉じた状態でも)。これを止める方法は?

4

2 に答える 2

2

おそらく最善の解決策は、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 が新しい設定を有効にするのに少し時間がかかることがよくあります (おそらく、デバイスの処理速度に依存します)。

于 2012-04-11T14:56:43.347 に答える
1

ForegroundDispatchSystem を使用します。

例:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

于 2012-04-11T07:39:41.543 に答える