Я хочу вставить NF C результат для ввода веб-сайта в браузере?
Я нашел это:
Nf c чтение только при работе с активностью. { ссылка } Я должен использовать InputMethodService для ввода текста. https://developer.android.com/guide/topics/text/creating-input-method.html Итак, я написал код. Я использовал NfcAdapter, чтобы поймать значение NF C. После того, как я скопировал значение Nf c с ClipboardManager, и я закрываю NfcActivity. Я использую для rkkr / simple-клавиатура. Моя пользовательская клавиатура имеет прослушиватель буфера обмена, так что я могу поймать значение и вставить значение. Сейчас они работают.
Но у меня проблема. Мое приложение работает везде, но не работает на ввод веб-сайта в браузере. Потому что моя пользовательская клавиатура закрывается в браузере, когда NF C успешно читает. Я не могу снова открыть клавиатуру, поэтому не могу вставить значение.
Вы можете мне помочь?
NF C Активность
public void handleIntent(Intent intent) {
if (intent.getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED)) {
Log.i("SENDNFC", "Tag");
}
if (intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
Log.i("SENDNFC", "Tag Extra");
// Gets the tag
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs = null;
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
if (msgs == null || msgs.length == 0) return;
String text = "";
// String tagId = new String(msgs[0].getRecords()[0].getType());
byte[] payload = msgs[0].getRecords()[0].getPayload();
String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16"; // Get the Text Encoding
int languageCodeLength = payload[0] & 0063; // Get the Language Code, e.g. "en"
// String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
try {
// Get the Text
text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
} catch (UnsupportedEncodingException e) {
Log.e("UnsupportedEncoding", e.toString());
}
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("simple text", "Nfc:" + text);
clipboardManager.setPrimaryClip(clip);
finish();
} else {
Intent i = new Intent(this, NfcActivity.class);
startActivity(i);
finish();
}
}
LatinIME. java> Метод onCreate
//... Keyboard Default Code
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
handlePaste();
}
});
LatinIME. java> метод handlePaste
private void handlePaste() {
Log.i("SENFC", "handle paste runned");
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null) {
ClipData.Item item = clipData.getItemAt(0);
if (item != null) {
if (item.getText().toString().startsWith("Nfc:")) {
if (isShowInputRequested()) {
Log.i("SENFC", "This is nfc");
if (getCurrentInputConnection() != null) {
if (getCurrentInputConnection().getExtractedText(new ExtractedTextRequest(), 0) != null) {
if (!getCurrentInputConnection().getExtractedText(new ExtractedTextRequest(), 0).text.toString().equals(item.getText().toString().substring(4))) {
getCurrentInputConnection().commitText(item.getText().toString().substring(4), 1);
ClipData clip = ClipData.newPlainText("simple text", "");
clipboardManager.setPrimaryClip(clip);
} else {
ClipData clip = ClipData.newPlainText("simple text", "");
clipboardManager.setPrimaryClip(clip);
}
}
} else {
}
} else {
//below codes is for try
updateSoftInputWindowLayoutParameters();
mInputLogic.startInput();
mInputLogic.mConnection.beginBatchEdit();
Log.i("SENFC",item.getText().toString() );
// this code running when I use a debugger
mInputLogic.mConnection.commitText("try paste", 1);
Log.i("SENFC", "input can not add");
}
} else {
Log.i("SENFC", "Startswith nfc : not found");
}
} else {
Log.i("SENFC", "Clipdata item null");
}
} else {
Log.i("SENFC", "Clip data Null");
}
}