NFC стек перестает искать новые теги
Я фактически разрабатываю приложение с действием, которое должно обрабатывать тег NFC, чтобы пользователь мог использовать это приложение.
Это действие вызывается, когда приложение запускается и возобновляется.
В большинстве случаев это работает нормально, но время от времени телефон (Samsung galaxy xcover 4) перестает искать новые метки NFC, он даже не воспроизводит звук при обнаружении.
Когда эта ошибка добавлялась, я пытался использовать другое приложение из Play Store для обработки тега NFC, но ничего не произошло.
Вот моя деятельность по обнаружению:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null || !nfcAdapter.isEnabled())
{
finish();
return;
}
final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);
//method to handle your intent
handleTag(getIntent());
}
@Override
public void onResume()
{
super.onResume();
final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);
nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
@Override
protected void onPause()
{
super.onPause();
nfcAdapter.disableForegroundDispatch(this);
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
handleTag(intent);
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}
private void handleTag(final Intent intent)
{
String action = intent.getAction();
final Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action))
{
try
{
Class isoDep = Class.forName("android.nfc.tech.IsoDep");
Method isoDep_get = isoDep.getDeclaredMethod("get", Tag.class);
final IsoDep techIsoDep = (IsoDep) isoDep_get.invoke(null, tag);
if (techIsoDep != null)
{
// --- Tag detected
}
}
catch (Exception e)
{
Log.e(TAG, "Exception while processing IsoPcdA object", e);
}
}
}
Редактировать: я заметил, что это происходит из-за того, что, даже если экран не становится черным, процессор или NFC-ридер переходит в спящий режим, мне нужно заблокировать и разблокировать телефон, чтобы он снова заработал, я сейчас смотрю для способа, чтобы процессор работал постоянно, то, что я пробовал:
Работает только с Galaxy Xcover 3 (Android 6.0.1)
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tag");
wl.acquire();
Я все еще не могу заставить его работать на Galaxy Xcover 4 (Android 8.1)
Пробовал с:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Но тоже не сработало.
1 ответ
Это может произойти, когда вы используете режим отладки в Android Studio и телефон теряет тег. телефон больше не сможет обнаружить метку, когда вы выключите NFC и включите его снова. Я не читал твой код, потому что ты сказал то же самое с другими приложениями. Просто попробуйте включить и выключить NFC в своем телефоне.