我实际上是在开发一个具有必须处理NFC标签以使用户能够使用此应用程序的活动的应用程序。
启动该应用程序并在其恢复时调用此活动。
大多数情况下,这种方法都可以正常工作,但手机(Samsung galaxy xcover 4)有时会停止寻找新的NFC标签,甚至无法在检测到声音时播放声音。
当此错误附加后,我尝试使用Play商店中的另一个应用程序来处理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);
}
}
}
编辑: 我注意到,这是因为即使屏幕没有变黑,CPU或NFC阅读器进入睡眠模式,我也必须锁定和解锁手机才能使其再次工作,我现在正在寻找我一直尝试过的使cpu一直运行的方法:
仅适用于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);
但是也没用。
答案 0 :(得分:0)
当您在Android Studio中使用调试模式并且手机丢失标签时,可能会发生这种情况。关闭NFC并将其重新打开时,手机将无法再检测到其他标签。 我没有读过您的代码,因为您说过其他应用程序也是如此。 只需尝试在手机中关闭并打开NFC。