在我的应用中,我使用NFC来阅读标签。我点击按钮启用NFC。打开进度对话框以读取NFC标签,完成后,NFC将被禁用。这一切都很好。但是当应用程序中未启用NFC并且我将NFC标签添加到手机时,默认的Android应用程序会读取NFC标签并将我的应用程序置于后台。
如何停用Android应用?
启用/禁用NFC的代码:
/**
* @param activity The corresponding {@link Activity} requesting the foreground dispatch.
* @param adapter The {@link NfcAdapter} used for the foreground dispatch.
*/
public static void setupForegroundDispatch(final Activity activity, NfcAdapter adapter) {
final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
IntentFilter[] filters = new IntentFilter[1];
String[][] techList = new String[][]{};
// Notice that this is the same filter as in our manifest.
filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
try {
filters[0].addDataType(MIME_TEXT_PLAIN);
} catch (IntentFilter.MalformedMimeTypeException e) {
throw new RuntimeException(activity.getString(R.string.exception_wrong_mime_type));
}
adapter.enableForegroundDispatch(activity, pendingIntent, filters, techList);
}
/**
* @param activity The corresponding {@link MainActivity} requesting to stop the foreground dispatch.
* @param adapter The {@link NfcAdapter} used for the foreground dispatch.
*/
public static void stopForegroundDispatch(final Activity activity, NfcAdapter adapter) {
adapter.disableForegroundDispatch(activity);
}
答案 0 :(得分:4)
您无法禁用此行为。启动了另一个应用程序,因为您的应用程序没有捕获标记。当你删除应用程序时,这将停止,但当然不是解决方案。
如果您想阻止这种情况,您应该抓住应用中的扫描标签,该标签位于前台
您已经知道如何使用enableForegroundDispatch
执行此操作。扫描标签时不要禁用前台调度,而是创建一个标志或确定是否要对标签执行某些操作的内容。
例如:
doSomethingWithTheTag
doSomethingWithTheTag
应为true
的代码处理程序添加条件。如果它是false
不对标记做某事。在大多数情况下,这将是您的onNewIntent
覆盖,只需确保每个活动都覆盖该功能。doSomethingWithTheTag
设置为true
doSomethingWithTheTag
设为false
希望我很清楚。祝你好运!
答案 1 :(得分:0)
我遇到了同样的问题,在我的手机中安装了2个nfc启用的应用程序。每当我启动我的应用程序立即默认应用程序打开,为此我创建一个BaseActivity并在我的所有活动中扩展它,并在那里我覆盖了两种方法
adapter.disableForegroundDispatch(mainActivity);
enableForegroundDispatch()
并且我对onNewIntent(Intent intent)方法只感兴趣的活动,我有一个像
的支票@Override
protected void onNewIntent(Intent intent)
{
if (!isThisDialogWindow)
handleIntent(intent);
}
所以当我的应用运行时,我摆脱了默认应用的打开。
注意但是,当我的应用运行时,我仍有一个问题,有时仍会打开其他应用。请天才调查:-)
答案 2 :(得分:0)
我想我想出了一个简单的解决方案,就是在创建PendingIntent
时,将第三个参数放在new Intent()
中。所以:
if (pendingIntent == null) {
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(), 0);
}
然后将NFC适配器设置为:
adapter.enableForegroundDispatch(this, pendingIntent, null, null);
在所有您不想在扫描NFC标签时在自己的应用程序中发生任何事情的活动中执行此操作(尽管它会产生声音),并且您也不希望默认的Android NFC读者弹出。