Как NF C сканировать без refre sh в android? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь пометить NF C в android. У моей активности есть веб-просмотр и установленный URL в onCreate (). При маркировке NF C информация NDEF может быть получена обычным образом, но адрес страницы не поддерживается.

как я могу ее решить?

@Override
public void onCreate(Bundle savedInstanceBundle){
    super.onCreate(savedInstanceBundle);
    setContentView(R.layout.activity_test);
    this.webview = findViewbyId(R.id.webview);
    this.webview.loadUrl("https://www.abcblarblar.com/");
    this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
}

@Override
public void onResume(){
    super.onResume();

    Intent intent = getIntent();

    if (NfcAdapter.ACTION_TAG_DISCOVERED == intent.getAction()) {
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        ...
    } 
}

Манифест. xml

<activity
        android:name="com.xxx.xxx.xxx.NFCActivity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustResize" >
        <intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

1 Ответ

0 голосов
/ 20 января 2020

Я полагаю (поскольку вы не показываете код о том, как вы читаете тег NF C), который вы используете enableForegroundDispatch?

Этот метод приостанавливает ваше приложение, пока ОС Android читает NF C Карты.

Если это причина, есть два возможных решения: -

1) Убедитесь, что ваше приложение обрабатывает паузу и сохраняет свой InstanceState (так как есть вероятность, что это может быть убит и перезапущен) или вы делаете что-то в onResume, что вызывает это.

2) Используйте enableReaderMode https://developer.android.com/reference/android/nfc/NfcAdapter#enableReaderMode (android .app.Activity,% 20 android .nf c .NfcAdapter.ReaderCallback,% 20int,% 20 android .os.Bundle) для чтения карты, поскольку при таком способе чтения карты NF C ваше приложение не получает Приостановлено, вместо этого обратный вызов создается в отдельном потоке в вашем приложении

...